4

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

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

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

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

有没有人对实现这一目标的最佳方法有任何想法?还是有更好的想法?

提前感谢您对任何人可能对该主题的任何反馈。

4

2 回答 2

3

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

has_attached_file :image,  
   :url => "/files/:basename.:extension",  
   :path => "/var/htdocs/public/files/:basename.:extension" 
于 2009-12-07T16:21:12.890 回答
0

您是否在同一个 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
于 2009-12-07T16:17:13.250 回答