使用 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 保存它们

数据未保存到 Parse Cloud Android

在 iOS 应用程序中更新 PFObject 的密钥时,需要从 Parse Cloud Code 保存和登录时运行代码

在 Parse.Cloud 代码中调用 Parse.Query 时无法找到对象

Parse Cloud 函数失败并出现错误 141