5

如何让 Paperclip 图像上传在 8 台机器上运行的 Rails 应用程序(负载平衡)上工作?

用户可以在应用程序上上传图像。图像存储在其中一台机器上。用户稍后请求图像,但未找到,因为它是从另一台机器请求的。

此类问题的解决方法是什么?我不能使用 AWS 或任何云服务;图像必须在内部存储。

谢谢。

4

2 回答 2

8

一种解决方案是使用 NFS 挂载一个共享文件夹,该文件夹将成为您public/system或您所称的包含回形针图像的文件夹的根目录。

不过,要使一切正常工作,需要考虑一些事项:

  • 使用仅包含资产的专用服务器,这样您的硬盘驱动器专用于服务您的回形针图像
  • NFS 可能很昂贵。使用它仅将文件从您的应用服务器写入您的资产服务器。您必须配置负载均衡器或反向代理或 Web 服务器以直接从资产服务器检索所有图像,而无需要求应用程序服务器通过 NFS 进行。
  • 当然,建议在您的资产服务器上使用 RAID 系统
  • 建议使用具有相同规格的第二个资产服务器。您可以使其充当备份服务器,并定期将您的回形针图像同步到它。如果主资产服务器出现故障,您将能够切换到该服务器。
  • 挂载共享 NFS 文件夹时,使用该soft选项,并通过高速本地网络连接挂载,例如:mount -o soft 10.0.0.1:/export/shared_image_folder. 如果您没有指定该soft选项,并且资产服务器出现故障,您的 Ruby 实例将继续等待服务器启动。一切都会卡住,网站会往下看。艰难地学会了这一点...

这些是使用 NFS 的一般准则。我在一个拥有数十万张图片的大型制作网站上使用它,它对我来说效果很好。

于 2012-11-27T22:41:40.077 回答
1

如果您不想使用 NFS 之类的文件共享,可以将图像存储在数据库中。这是一个为 Paperclip 提供:database存储类型的 gem:

https://github.com/softace/paperclip_database

于 2013-09-02T18:35:04.890 回答