使用 Parse Cloud 代码将文件保存在 Heroku 文件系统中?
Posted
技术标签:
【中文标题】使用 Parse Cloud 代码将文件保存在 Heroku 文件系统中?【英文标题】:Saving files in Heroku file system using Parse Cloud code? 【发布时间】:2017-07-21 04:46:10 【问题描述】:我在 Heroku 上使用 Parse Server,我想知道我是否能够通过云代码将文件保存到 heroku。
类似这样的:
云代码(main.js):
Parse.Cloud.define("saveFile", function(request, response)
fs.writeFile("test", "helloworld", function(err)
if(err)
return console.log(err);
console.log("The file was saved!");
);
然后在终端通过 curl 调用调用这个函数:
curl -X POST -H "X-Parse-Application-Id: yourappid" -H "Content-Type: application/json" https://your-parse-server.herokuapp.com/parse/functions/saveFile
在 heroku 日志中,我可以看到打印“文件已保存”的控制台,但是,当我查看 heroku /app 目录(通过 heroku CLI:heroku run ls)时,文件“test”不是列出。
我的问题:
-
我无法创建任何文件并将其保存到 Heroku 文件系统吗?
文件是否已保存,但文件的目录对我隐藏?
有什么方法可以验证文件是否已保存?
有什么方法可以访问创建的文件(如果保存的话)?
提前致谢!
【问题讨论】:
【参考方案1】:不,这是不可能的。 Heroku 有一个ephemeral filesystem。
每当您部署应用时,他们都会构建一个容器,您的代码可以在该容器上运行。然后获取该容器并作为 dynos 运行。 如果您将文件写入磁盘,它们将不会保留在当前运行的容器之外(任何其他 dyno 都不会拥有它们,并且在重新启动/部署应用程序时它们将永久丢失)。
您希望对应用程序进行的任何代码更改都需要进行新的部署。
【讨论】:
意味着文件是临时的,对吗?如果是这样,那么是否可以访问由该函数创建的这个“临时文件”? 是的,该文件是临时的。当前运行的进程可以访问该文件,是的。但是您无法使用heroku run
访问它,或者在应用重新启动后。
文件是否保存在某个隐藏的临时文件夹中?因为一旦我运行此代码并且日志显示“文件已保存!”,我在 heroku 控制台上尝试了 heroku run ls 并且看不到预期的文件。我错过了什么吗?
不,文件没有保存在某个隐藏文件夹中。当你运行heroku run
时,你会得到一个新容器。使用您部署的代码的新服务器,而不是所做的文件系统更改。只有将文件保存在磁盘上的进程才能看到。以上是关于使用 Parse Cloud 代码将文件保存在 Heroku 文件系统中?的主要内容,如果未能解决你的问题,请参考以下文章
将 Parse Cloud Code 与 Parse Server Heroku 一起使用
向用户添加数据,然后使用 Parse Cloud Code 保存它们
在 iOS 应用程序中更新 PFObject 的密钥时,需要从 Parse Cloud Code 保存和登录时运行代码