0

私は、delayed_jobs に基づいたメーリング リスト機能を Rails で作成しようとしています。今のところ、users テーブルとメールを繰り返し処理して、.deliverすべてのメール アドレスにメールを送信します。

それをdelayed_jobsに統合するにはどうすればよいですか?5分ごとに50通のメールを送信し、どのアドレスがすでに完了しているかを覚えていますか? 送信したすべてのメールを保存し、さらに 50 通のメールを送信するたびに確認する別のテーブルを作成する必要がありますか?

前もって感謝します。

4

3 に答える 3

4

おそらく、送信された電子メールのテーブル エントリが必要になるでしょう。そうすれば、プロセスがダウンしたり何らかの形で失敗したりした場合に、監査証跡として機能します。

MongoLab、MongoHQ、SimpleDB などのエラスティック クラウド データベースでこれを行うことを検討することをお勧めします。(Mongo ベースのサービスを使用すると、新しい電子メール エントリのスキーマを簡単に拡張できます。)

これを行うと、SimpleWorker のようなクラウド ワーカー キューを使用すると、大量のメールを同時に送信したり、バッチで送信したりして、レート制限を回避することが容易になります。(完全な開示: 私は Iron.io/SimpleWorker で働いています)

You're taking a good approach to bundle multiple email sends into a single worker task to amortize the worker setup costs. With an elastic cloud worker system, you could have master workers come off schedule and then queue up a number of slave worker tasks, each with a set of users to send.

With table entries, you can then go back through the data tables and address any emails that failed or didn't go through.

于 2011-09-09T19:42:53.643 に答える
0

50 通のメールは、数秒で送信できる量ではないと思います。foreverb5 分ごとにメールを送信するために使用します。

于 2011-09-09T03:08:33.590 に答える
0

遅延ジョブにすべての作業を任せます:

User.all.each_with_index |user, index|
  Mailer.delay({:run_at => ((index / 50) * 5).minutes.from_now}).send_newsletter(user)
end

これは動作するはずですが、テストされていません。

于 2011-09-09T20:18:27.620 に答える