【问题标题】:Heroku and Rails file uploadsHeroku 和 Rails 文件上传
【发布时间】:2012-09-20 00:26:05
【问题描述】:

我在网上阅读了很多关于在 Rails 中上传文件会导致 Web 应用程序挂起的内容,我想知道 Heroku Dyno 是否会出现这种情况?如果用户要上传 1 gig 文件,那么如果它托管在单个测功机上,这会导致应用程序的其余部分挂起吗?

【问题讨论】:

    标签: ruby-on-rails heroku


    【解决方案1】:

    Rails 默认不是线程安全的。这意味着每个运行的 Rails 实例一次只能处理一个请求。

    在 Heroku 上,您可以在单个测功机上运行 1 个进程。可能是 Thin、Unicorn、delayed_job 工人等。

    由于默认情况下 Rails 不是线程安全的,Thin 一次只能处理 1 个请求(这意味着您的 dyno 一次只能处理 1 个请求)。在这种情况下,当用户上传 1 GB 文件时,Thin 只能处理该请求 = 导致下一个请求挂起。要解决这个问题,您必须缩放测功机的数量。例如运行 4 个 dyno(运行 Thin),一次可以处理 4 个请求。

    但是,如果您在 Heroku dyno 上使用 Unicorn,并将 Unicorn worker 数量设置为 4,那么 Rails 一次可以处理 4 个请求。独角兽很聪明。它在单个 Heroku dyno 中生成 4 个进程。这意味着当你上传一个 1 GB 的文件时,Unicorn 会继续处理 3 个请求。这一切都在一个测功机上运行。

    查看本文了解有关 Heroku 和 Unicorn 的更多信息:http://michaelvanrooijen.com/articles/2011/06/01-more-concurrency-on-a-single-heroku-dyno-with-the-new-celadon-cedar-stack/

    希望这会有所帮助。

    更新

    如果您将文件上传到 S3,您实际上可以完全跳过您的测功机并将文件直接上传到 S3。只是一个提示。 ;-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-22
      • 2014-05-07
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 2017-01-18
      • 2011-03-27
      • 2011-09-21
      相关资源
      最近更新 更多