1

ActiveMailerで使用するdelayed_jobをインストールしたので、バックグラウンドジョブとして一括メールを送信できます。問題は、ワーカーがジョブを取得するときに、delayed_jobsテーブルのデータベースにジョブがインストールされているにもかかわらず、電子メールが実行されないことです。

詳細は次のとおりです。

  • Railsバージョン3.2.2
  • delayd_job 3.0.3
  • delayd_job_active_record 0.3.2

ActiveMailerのDelayed_Jobドキュメントで推奨されているように、電子メールジョブは呼び出しを介してキューに配置されます。

MemberMailer.delay.all_member_email(m, @message)

これは、サイトの1人または複数のメンバーに送信するメッセージを受け入れるように設計されたemail_list_controllerと呼ばれるコントローラーです。実行後、ログファイルは次のようにdelayed_jobsテーブルへのSQLINSERTを示します。

SQL (0.2ms)  INSERT INTO `delayed_jobs` (`attempts`, `created_at`, `failed_at`, `handler`, `last_error`, `locked_at`, `locked_by`, `priority`, `queue`, `run_at`, `updated_at`) VALUES (0, '2012-07-30 11:42:47', NULL, '--- !ruby/object:Delayed::PerformableMailer\nobject: !ruby/class \'MemberMailer\'\nmethod_name: :all_member_email\nargs:\n- !ruby/ActiveRecord:Member\n attributes:\n id: \n family_id: \n title: \n first_name: FirstName\n last_name: LastName\n middle_initial: \n dob: \n gender: \n home_phone: \n work_phone: \n fax: \n mobile: \n email: grantsayer@gmail.com\n user_id: \n boat_event_id: \n ayf: \n guardian: \n consent: \n created_at: \n updated_at: \n- !ruby/ActiveRecord:Message\n attributes:\n id: 1\n subject: ! \'[IGNORE] - Testing\'\n body: ! \"<b>A body</b>\\r\\nMore lines\\r\\nAnother line \\r\\nStuff\\r\\nMore Stuff How\n to do more stuff\\r\\n\"\n created_at: 2012-04-20 04:17:51.000000000 Z\n updated_at: 2012-07-30 10:06:09.000000000 Z\n sent: 1\n date: 2012-04-20\n', NULL, NULL, NULL, 0, NULL, '2012-07-30 11:42:47', '2012-07-30 11:42:47')
(26.8ms)  COMMIT

その後すぐに、労働者は仕事を削除します

SQL (0.2ms)  DELETE FROM `delayed_jobs` WHERE `delayed_jobs`.`id` = 8

ワーカージョブは、レーキタスクを介して開始されます

rake jobs:work

送受信された電子メールの記録はありません。

電子メールプロセスは通常、delayed_jobメソッドなしでテストするときに機能します

MemberMailer.all_member_email(m, @message).deliver

電子メールが送信され、適切なパスを介して配信されます。

他の誰かがこの問題を経験しましたか?一般的な「oogling」は、delayed_jobの以前のバージョンと無効なオブジェクトに問題があることを示しました。DB内のデータから、YAMLシリアル化された情報は問題ないように見えます。

4

1 に答える 1

1

あなたの説明から、私は労働者がそれの仕事を正しくしていることを期待します。ワーカーがジョブが完了したと判断し、例外が発生していない場合、ジョブはキューから削除されます。

delayed_jobイニシャライザで微調整できるいくつかの構成オプションがありますデフォルト設定では、数分の遅延で25回の再試行が行われます。

方法を検討することをお勧めしMemberMailer.all_member_emailます。よくある間違いは、そこでインスタンス変数またはメソッドを参照することです。

それでも問題が解決しない場合は、MemberMailerクラスのコードを投稿してください。

于 2012-07-31T07:11:41.960 に答える