我在Bluemix上使用rails 4应用程序,使用paperclip 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没有持久保存这些信息。如何在应用重启之间抓住这些文件?
答案 0 :(得分:2)
Bluemix构建于Cloud Foundry之上,它有一个短暂的文件系统,即,一旦您的应用程序停止,平台将声明该文件系统,并在您重新启动应用程序后创建一个全新的文件系统。
不建议在云应用程序中写入本地文件系统,您可能需要重新设计应用程序才能使用Bluemix。一种解决方案是将文件保存在数据库中,而不仅仅是参考文件。
您可以在link找到更多详细信息。
答案 1 :(得分:0)
Bluemix上的每个应用程序实例(基于Cloud Foundry)都具有短暂的存储空间。此存储仅在该特定实例的生命周期内可用。当您重新部署应用时,您将获得一个新的应用实例,并且以前的应用实例上的任何数据都将无法访问。
在为Bluemix / Cloud Foundry设计应用程序时,有一个很好的解释为什么它最适合avoid writing to the local file system。
您可能需要查看像CarrierWave to store the files on Amazon S3这样的宝石或其他持久性商店。还有Paperclip,它提供类似的功能。