3

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

目前,这些文件存储在 Apache 与Passenger 一起运行以服务所有应用程序请求的同一台服务器上。

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

因此,我正在讨论如何实现应用程序服务器和文件服务器之间的通信的不同选项。我想从一个简单且万无一失的解决方案开始。如果它以后可以在多个文件服务器上很好地扩展,我会非常高兴。

以下是我一直在研究的一些不同选项:

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

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

4

3 回答 3

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 & secret。
  6. 使用 S3 插件创建一个具有唯一名称的存储桶,可能是“your-paperclip-demo”。
  7. 编辑 app/models/user.rb,并将您的存储桶名称放在倒数第二行 (:bucket => 'your-paperclip-demo')。
  8. 在本地启动您的服务器并将一些文件上传到您的本地应用程序。您将从 S3 插件中看到该文件已上传到新存储桶中的 Amazon S3。

我通常非常不称职或不走运,无法让这些东西正常工作,但使用 Pedro 的小型 S3 上传应用程序我成功了。祝你好运。

于 2010-04-02T13:12:02.230 回答
1

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

于 2010-03-13T23:05:01.427 回答
0

我认为 S3 是你最好的选择。使用像 Paperclip 这样的插件,添加到 Rails 应用程序真的很容易,而且不必担心缩放它会省去头疼的问题。

于 2010-03-03T19:17:21.617 回答