【问题标题】:Prevent request timeout with long requests防止长请求的请求超时
【发布时间】:2012-09-29 06:51:06
【问题描述】:

我在 Heroku 上有一个 Rails 控制器,我在其中循环发送电子邮件,并向用户回复一些有关电子邮件发送到哪个电子邮件地址的信息。

虽然这在只需要发送几封(约 40 封)电子邮件时有效,但当要发送的电子邮件不止几封(例如 > 40 封)时,请求就会超时。

Heroku 在其指南中指出,请求必须在 30 秒内至少响应一个字节:https://devcenter.heroku.com/articles/request-timeout

虽然我知道这不是实现这一目标的最佳方式,但我目前正试图弄清楚如何在 Ruby 中做到这一点。

如果这是一个 PHP 应用程序,我可以在进入循环之前执行 echo,然后在每次迭代中保持 echoing 一些东西。如何在 Rails 中实现类似的功能?

【问题讨论】:

    标签: ruby-on-rails heroku


    【解决方案1】:

    您最好不要在发回回复之前进行邮寄。首先将作业添加到 Heroku 的许多可用工作队列之一,然后踢到显示作业进度并定期更新自身的监控页面,您将有更好的运气。如果您出于预算原因试图避免使用其中一种队列服务,则可以使用新线程而不是队列来完成相同的事情。无论哪种方式,这种技术都会更好地扩展,并且能够更轻松地从故障中恢复。

    您似乎已经知道您提出的解决方案不是理想的解决方案,我也会尝试回答您的确切问题。您也许可以为此使用 HTTP 流式传输。我建议查看http://railscasts.com/episodes/266-http-streaming

    【讨论】:

    • 谢谢。我确实试图避免为 Heroku 的工人 dynes 付费。
    • 是的,这些插件加起来很快。
    • 您可以查看github.com/lostboy/workless ,让员工节省预算。
    • 哇。不知道那件事。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 2011-04-23
    相关资源
    最近更新 更多