2012-10-09 212 views
6

我在Heroku上有一個Rails控制器,我在循環中發送電子郵件,並通過一些關於電子郵件發送到哪個電子郵件地址的信息來響應用戶。防止長請求請求超時

雖然這隻適用於僅需要發送幾封(〜40封)電子郵件,但如果發送的電子郵件數量超過一些(例如> 40),則請求超時。

在他們的嚮導Heroku的規定,要求必須有至少一個字節的30秒內作出反應:https://devcenter.heroku.com/articles/request-timeout

雖然我知道這是不是實現這一目標的最佳方式,我正在試圖找出如何在Ruby中執行此操作。

如果這是一個PHP應用程序,我可以在進入循環之前做一個echo,然後在每次迭代中保留echo。我如何在rails中實現類似的功能?

回答

4

最好的辦法是在發送迴應之前不要做郵件。首先將工作添加到Heroku的許多可用工作隊列中,然後踢到顯示工作進度並定期更新自己的監控頁面,將會有更好的運氣。如果您試圖避免使用其中一種隊列服務,出於預算的原因,您可以使用新線程而不是隊列來完成同樣的任務。無論哪種方式,這種技術將會更好地擴展,並且還能夠更容易地從故障中恢復。

由於您似乎已經知道您提出的解決方案不是理想的解決方案,因此我也會嘗試回答您的確切問題。您可能可以使HTTP流式傳輸爲此工作。我會建議檢查http://railscasts.com/episodes/266-http-streaming

+0

謝謝。我的確在努力避免爲Heroku的工人達因付錢。 – rdasxy

+0

是的,這些加載項都快速加起來。 –

+1

你可能會檢查出https://github.com/lostboy/workless,以獲得預算的工人。 –