【问题标题】:Heroku timeout when uploading big file to s3将大文件上传到 s3 时 Heroku 超时
【发布时间】:2011-12-12 20:17:07
【问题描述】:

我的基于 RefineryCMS 1.0.8 的应用程序出现问题 部署在heroku上。

Heroku 的请求超时为 30 秒。上传文件时 > 4MO 通过 RefineryCMS admin,有时需要超过 30 秒来执行请求(主要是因为需要时间 将文件上传到 s3)。

在这种情况下,测功机将被“冻结”并且 大约 30 分钟无响应(在此期间的每个请求都结束 H12 错误请求超时)。这种行为正是this discussion 中最后一条消息中描述的 christos

从此other discussion 和the heroku documentation :“直接上传到 S3 是首选方法,如果您是 处理大于 4MB 的文件上传。这个想法是跳过跳跃 到您的测功机,直接从最终用户浏览器建立连接 到 S3。”

直接上传到 S3 应该是解决方案,但看起来很难 让我用 RefineryCMS / Dragonfly / Fog 正确实施它。我不确定是否可以不对这些工具进行大的修改,我想知道是否有替代方案。

感谢您的帮助

【问题讨论】:

    标签: ruby-on-rails heroku amazon-s3 refinerycms fog


    【解决方案1】:

    不是真的。 Heroku 超时是您需要解决的固定问题。直接上传到 S3 是唯一的选择,需要进行某种上传后处理。

    有一些解决方案,例如 CarrierWaveDirect,但我不知道这与 Refinery 一起使用会有多容易。

    【讨论】:

    • 这并不是一成不变的。如果您使用事件解决方案(例如,Eventlet),您可以将超时设置得更高(我只是将我的设置为 60 秒并花了 48 秒成功地将照片上传到我的应用程序),Heroku 不会在意,因为它不是阻止。
    【解决方案2】:

    您可以尝试将独角兽添加到您的应用程序中。

    config/unicorn.rb

    worker_processes 整数(ENV["WEB_CONCURRENCY"] || 3)

    timeout 180 #

    preload_app 真

    before_fork 做 |server, worker|

    https://devcenter.heroku.com/articles/rails-unicorn

    【讨论】:

    • 这会覆盖heroku超时吗?
    • 当使用 Rails 时,这允许 180 秒的超时时间,这允许我的 s3 上传完成 - 我认为 Heroku 默认设置为 unicorn 中设置的超时时间。
    • Heroku 路由器不会默认为应用独角兽配置中设置的任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 2014-03-11
    • 2012-09-28
    • 2019-02-20
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多