Delayed_job不使用ActiveMailer 3.x发送电子邮件

时间:2012-07-31 01:24:51

标签: ruby-on-rails ruby-on-rails-3.2 delayed-job

我安装了delayed_job以便与ActiveMailer一起使用,因此我可以将批量电子邮件作为后台作业发送。问题是,虽然当工作人员提取作业时,工作正在 delayed_jobs 表中安装到数据库中,但不会执行任何电子邮件。

详情如下:

  • Rails版本3.2.2
  • delayed_job 3.0.3
  • delayed_job_active_record 0.3.2

电子邮件作业通过呼叫被置于队列中,如Delayed_Job Documentation为ActiveMailer所建议,

MemberMailer.delay.all_member_email(m, @message)

这是一个名为 email_list_controller 的控制器,旨在接受发送给网站的一个或多个成员的消息。执行后,日志文件将一个SQL INSERT指示到delayed_jobs表中,如show:

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任务

启动工作人员作业
rake jobs:work

没有发送或接收电子邮件的记录。

在没有delayed_job方法的情况下进行测试时,电子邮件过程通常有效

MemberMailer.all_member_email(m, @message).deliver

发送电子邮件,通过适当的路径发送。

还有其他人遇到过这个问题吗?一般'oogling'表明早期版本的delayed_job和无效对象存在问题。从数据库中的数据看,YAML序列化信息看起来没问题。

1 个答案:

答案 0 :(得分:1)

根据你的描述,我希望工人正确地完成它的工作。当工作人员认为工作完成且没有异常发生时,作业将从队列中删除。

delayed_jobseveral configuration options您可以在初始化程序中进行调整。默认设置意味着25次重试,延迟几分钟。

我建议查看MemberMailer.all_member_email方法。一个常见的错误是在那里引用实例变量或方法。

如果没有帮助,请发布您MemberMailer课程的代码。