我在Heroku上有一个Rails Controller ,可以在其中循环发送电子邮件,并向用户回复一些有关将电子邮件发送到哪个电子邮件地址的信息。
虽然这仅在需要发送几封电子邮件的情况下有效(〜40),但是当发送的邮件数量超过几封(例如> 40)时,请求就会超时。
Heroku在其指南中指出,请求必须在30秒内至少响应一个字节:https://devcenter.heroku.com/articles/request-timeout
虽然我知道这不是实现此目标的最佳方法,但我目前正在尝试弄清楚如何在Ruby中执行此操作。
如果这是一个PHP应用程序,我可以在进入循环之前执行echo
,然后在每次迭代中保持echo
的内容。如何在Rails中实现类似的目的?
最佳答案
最好的选择是在发回响应之前不要进行邮寄。您将有更好的运气,首先将作业添加到Heroku的许多可用 worker 队列之一中,然后转到显示作业进度并定期进行自我更新的监视页面。如果出于预算原因而尝试避免使用这些队列服务之一,则可以使用新线程而不是队列来完成同一件事。无论哪种方式,此技术都将更好地扩展,并且也能够更轻松地从故障中恢复。
您似乎已经知道您提出的解决方案不是理想的解决方案,所以我也将尽力回答您的确切问题。您也许可以为此启用HTTP流传输。我建议您检查http://railscasts.com/episodes/266-http-streaming。