6

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

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

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

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

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

4

1 回答 1

4

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

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

于 2012-10-09T03:28:16.943 回答