使用长请求防止请求超时

时间:2012-10-09 01:14:53

标签: ruby-on-rails heroku

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

虽然只需要发送几封(约40个)电子邮件时这种情况有效,但当有更多电子邮件要发送时,请求会超时(例如> 40)。

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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