【问题标题】:How to persist Bluemix files between app restarts如何在应用程序重新启动之间持久保存 Bluemix 文件
【发布时间】:2016-12-02 09:10:49
【问题描述】:

我在 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 没有保留此信息。如何在应用重新启动之间获取这些文件?

【问题讨论】:

    标签: ruby ruby-on-rails-4 paperclip ibm-cloud


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的评论@alex。不幸的是,这就是我的 gem 的工作方式,我无法进行任何调整来将文件保存在实际数据库中,而不是将其保存到文件系统中。我将有一些备份,同时将文件发送到一个盒子文件夹,但是没有机会在 Bluemix 中缓存来自文件系统的信息?
    • Bluemix 文件系统中没有缓存选项。重新启动应用程序时,文件系统中运行时创建的所有内容都将丢失。
    • @VladBalanescu - 我在某些项目中使用过的一种 hacky 技术是在 Bluemix CF 应用程序中使用 SSHFS(fusemount)支持来映射到启用 ssh 的 IBM Container (Docker) 实例,该实例使用持续量。根据文件的大小,它有时可以正常工作。您可以了解herehere 的方法
    【解决方案2】:

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

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

    您可能想看看像 CarrierWave to store the files on Amazon S3 这样的 gem 或其他持久存储。还有 Paperclip 提供类似的功能。

    【讨论】:

      猜你喜欢
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      相关资源
      最近更新 更多