与Rails应用程序一起使用的文件服务器的建议

时间:2010-02-17 21:35:18

标签: ruby-on-rails filesystems network-storage

我正在开发一个Rails应用程序,它接受文件上传,用户可以在以后修改这些文件。例如,他们可以更改文本文件内容或对图像执行基本操作,如调整大小,裁剪,旋转等。

目前,文件存储在运行Apache的同一台服务器上,以便为所有应用程序请求提供服务。

我需要将用户文件移动到专用服务器以在我的设置上分配负载。目前,我们的用户每周上传大约10GB的文件,这不是很大的数量,但最终会增加。

因此,我将介绍如何实现应用程序服务器与文件服务器之间的通信的不同选项。我想从一个简单而傻瓜式的解决方案开始。如果它稍后在多个文件服务器上扩展得很好,我会非常高兴。

以下是我一直在调查的一些不同选项:

  • 亚马逊S3。我发现为我的应用程序实现起来有点困难。它增加了再次“上传”上传文件的复杂性(可能多次以后),请注意用户可以使用我的应用程序修改文件和图像。除此之外,它将是“设置并忘记它”的解决方案。
  • 某种简单的RPC服务器,它位于文件服务器上,并在从应用程序服务器端查看时透明地管理文件。我还没有找到任何标准和经过良好测试的工具,所以这在我看来更具理论性。然而,在GitHub中构建和使用的Bert和Ernie似乎很有趣,但可能过于复杂只是为了开始。
  • MogileFS似乎也很有趣。没有看到它在使用中(但那是我的问题:)。

所以我正在寻找不同的(可能是基于标准的)方法来实现Web应用程序的文件服务器以及它们如何在野外工作。

3 个答案:

答案 0 :(得分:2)

使用S3。它很便宜,点菜,如果人们开始下载他们的文件,你的服务器就不会受到压力,因为你的下载页面可以直接指向上传文件的S3 URL。

“Pedro”有一个很好的示例应用程序,适用于github.com的S3。

  1. 克隆应用程序(git clone git://github.com/pedro/paperclip-on-heroku.git)
  2. 确保安装了right_aws gem。
  3. 将您的Amazon S3凭据(API和秘密)放入config / s3.yml
  4. 安装Firefox S3插件(http://www.s3fox.net/
  5. 进入Firefox S3插件并输入你的api&秘密。
  6. 使用S3插件创建一个具有唯一名称的存储桶,可能是“your-paperclip-demo”。
  7. 编辑app / models / user.rb,并将您的存储桶名称放在最后一行(:bucket =>'your-paperclip-demo')。
  8. 在本地启动服务器并将一些文件上传到本地应用。您将从S3插件中看到该文件已在新存储桶中上载到Amazon S3。
  9. 我通常非常不称职或不善于使这些事情发挥作用,但是通过Pedro的小型S3上传应用程序,我获得了成功。祝好运。

答案 1 :(得分:1)

您还可以尝试编译Dropbox版本(它们提供源代码)并将ln -s编译到您的公共/系统目录,以便回形针保存到它。这样你就可以从任何桌面远程访问文件......我还没有这样做,所以我无法证明它有多么简单/有用/有价值,但它在我的teux deux列表中。 。:)

答案 2 :(得分:0)

我认为S3是你最好的选择。使用像Paperclip这样的插件,它非常容易添加到Rails应用程序中,而且不必担心缩放它会节省头痛。