【问题标题】:Sharing Uploaded Files between multiple Rails Applications在多个 Rails 应用程序之间共享上传的文件
【发布时间】:2009-12-07 14:29:30
【问题描述】:

我有多个共享一个数据库的应用程序(一个管理应用程序、一个“公共”/非管理应用程序和一个 Web 服务应用程序)。

我已经让应用程序在适当的情况下共享模型和其他代码,因此我没有在每个应用程序中拥有相同代码的多个副本。但是,我尚未配置的一项任务是如何在应用程序之间共享上传的文件。我正在使用Paperclip 成功将文件上传到我的应用程序,但如果它将文件上传到执行上传的应用程序。

理想情况下,我希望能够提供来自网络服务的所有文件。我的想法是,每次将新文件上传到任何应用程序时,我都需要执行某种类型的任务,以便在 Web 服务的文件结构中创建文件。

我知道如果我将文件加载到数据库中,我可以轻松地从单个应用程序中完成文件服务(这是我在类似的应用程序套件中完成此操作的方式),但我不确定这是否是最佳途径用于管理/服务文件。我的另一个想法是将文件存储在数据库中并让 Web 服务管理“服务”它们并让它在第一次请求时在磁盘上创建文件。在第一次请求文件后,Web 服务将从磁盘而不是从数据库中提供文件。

有没有人知道实现这一目标的最佳方法是什么?还是有更好的想法?

提前感谢任何人对此主题的任何反馈。

【问题讨论】:

  • 尽量不要错过这里显而易见的事情,但您是否表示您没有可供所有三个应用程序访问的共享文件系统?它们是需要通过身份验证保护的文件,还是可以从静态资产主机提供?
  • 除了应用程序本身可能提供的之外,不需要任何身份验证。它们可以由静态资产主机提供服务,我想这就是我真正想要实现的目标。

标签: ruby-on-rails file-upload paperclip file-sharing


【解决方案1】:

如果您有这种设置,我建议将它们放在由前端网络服务器(而不是 Rails)直接提供的共享位置,在本例中,它提供一个名为 files 的位置,该位置指向一个文件夹磁盘。然后在回形针选项中,更改保存位置。

has_attached_file :image,  
   :url => "/files/:basename.:extension",  
   :path => "/var/htdocs/public/files/:basename.:extension" 

【讨论】:

  • 感谢马特的输入。我认为这听起来像是理想的解决方案,文件的 URL 将如何受到影响?
  • 我最终使用了这个解决方案。在查看了 Paperclip 插件的源代码后,我注意到您可以将完全限定的域名设置为附件的 URL。我配置了一个从适当的环境配置文件加载的全局变量,以适当地设置域。感谢马特的建议。
【解决方案2】:

您是否在同一个 UNIX/Linux 系统上运行所有应用程序?您是否尝试过创建符号链接来共享包含图像的文件夹?目标是将所有图像保存到同一位置。无需为附件创建添加复杂的钩子。

默认情况下,Paperclip 将内容存储在 :rails_root/public/system/:attachment/:id/:style/:filename 如果您要共享数据库,则不必担心冲突。您只需要创建一个供每个应用程序使用的系统文件夹。

您可以使用一个应用的公共/系统文件夹作为主文件夹,或创建一个全新的文件夹。从这一点开始,所有其他不是主文件夹的系统文件夹都将被称为从文件夹。一旦你选择了你的主文件夹,就像将每个从文件夹中的所有内容移动到主文件夹一样简单。删除从属文件夹并将其替换为指向主文件夹的符号链接。

给定回形针默认值的用于迁移和替换符号链接的示例命令集。在尝试此操作之前停止服务器可能是个好主意。

$ mv /path/to/slave/project/public/system/* /path/to/master/system
$ mv /path/to/slave/project/public/system.bak
$ ln -s /path/to/master/system /path/to/slave/project/public/system

确定迁移成功后,您可以删除备份:

$ rm /path/to/slave/project/public/system.bak

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 2014-06-04
    相关资源
    最近更新 更多