6

Heroku に Rails コントローラーを使用してループでメールを送信し、メールの送信先のメール アドレスに関する情報をユーザーに返信します。

これは少数 (~40) の電子メールのみを送信する必要がある場合に機能しますが、送信する電子メールが数個よりも多い (例: > 40) 場合、リクエストはタイムアウトします。

Heroku はガイドで、リクエストは 30 秒以内に少なくとも 1 バイトで応答する必要があると述べています: https://devcenter.heroku.com/articles/request-timeout

これがこれを達成する最良の方法ではないことはわかっていますが、現在、Ruby でこれを行う方法を見つけようとしています。

これが PHP アプリの場合echo、ループに入る前にを実行echoし、すべての反復で何かを保持することができます。レールで同様のことを達成するにはどうすればよいですか?

4

1 に答える 1

4

あなたの最善の策は、応答を送り返す前に郵送しないことです. 最初に Heroku の多くの利用可能なワーカー キューの 1 つにジョブを追加し、次にジョブの進行状況を表示して定期的に更新する監視ページに移動すると、運が良くなります。予算上の理由から、これらのキュー サービスのいずれかの使用を避けようとしている場合は、キューの代わりに新しいスレッドを使用して同じことを達成できる場合があります。いずれにせよ、この手法は拡張性に優れているだけでなく、障害からの回復も容易になります。

提案された解決策が理想的な解決策ではないことをすでに知っているように見えるので、私はあなたの正確な質問にも答えようとします. これには、HTTP ストリーミングを機能させることができる場合があります。http://railscasts.com/episodes/266-http-streamingを確認することをお勧めします。

于 2012-10-09T03:28:16.943 に答える