如何在应用程序重新启动之间保留 Bluemix 文件

How to persist Bluemix files between app restarts

我在 Bluemix 上使用 rails 4 应用程序,使用回形针 gem 附加文件。众所周知,Paperclip 在实际数据库中保存对该文件的引用,将物理文件保存到 /public 位置。

我正在向此数据库提交文件,该文件已保存在此处

/home/vcap/app/public/files/submissions/files/140/original/Successful_Submission.pdf

然后文件检索工作正常。一旦我重新启动我的应用程序,我得到:

Errno::ENOENT (No such file or directory @ rb_file_s_lstat - /home/vcap/app/public/files/submissions/files/140/original/Successful_Submission.pdf):

这是因为 Bluemix 没有保留此信息。我怎样才能在应用重启之间获取这些文件?

Bluemix 建立在 Cloud Foundry 之上,它有一个临时文件系统,即,一旦您的应用程序停止,平台将收回该文件系统,并在您重新启动应用程序后创建一个全新的文件系统。

不建议为云应用程序写入本地文件系统,您可能需要重新设计您的应用程序才能使用 Bluemix。一种解决方案是将文件保存在数据库中,而不仅仅是参考。

您可以在此找到更多详细信息link

Bluemix(基于 Cloud Foundry)上的每个应用程序实例都有临时存储。此存储仅在该特定实例的生命周期内可用。当您重新部署您的应用程序时,您将获得一个新的应用程序实例,并且之前的应用程序实例上的任何数据都将无法访问。

对于为什么在为 Bluemix / Cloud Foundry 设计应用程序时最好 avoid writing to the local file system 有一个很好的解释。

您可能想看一下 gem,例如 CarrierWave to store the files on Amazon S3 or another persistent store. There's also Paperclip,它提供了类似的功能。