2012-07-31 61 views
1

我已经安装delayed_job用于ActiveMailer使用,所以我可以发送批量电子邮件作为后台作业。问题是,虽然作业正在被安装到数据库中,但当工作人员拿起作业时,不会执行电子邮件。Delayed_job不发送电子邮件与ActiveMailer 3.x

的细节是:

  • 的Rails 3.2.2版本
  • delayed_job的3.0.3
  • delayed_job_active_record 0.3.2

电子邮件作业通过调用放置到队列中,如在ActiveMailer的Delayed_Job Documentation中推荐的那样,其中

MemberMailer.delay.all_member_email(m, @message) 

这是一个名为的控制器email_list_controller旨在接受发送给站点的一个或多个成员的消息。执行后的日志文件指示SQL插入delayed_jobs表作为显示:

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: [email protected]\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序列化的信息看起来没问题。

+0

'MememberMailer'在哪里?没有使用“延迟”工作?如何在all_meember_email中记录一些东西? – shigeya 2012-07-31 04:47:29

+0

您是否在启动rails server之前使用命令'script/delayed_job start'启动delayed_job服务器? – Salil 2012-07-31 05:24:44

+0

我已经测试了MemberMailer没有延迟,它工作正常 – 2012-07-31 11:13:41

回答

1

从你的描述我会期望工人正确地做它的工作。当工作人员认为工作已完成并且没有发生异常时,该作业将从队列中移除。

delayed_jobseveral configuration options你可以在初始化器中调整。默认设置装置25以几分钟的延迟重试。

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

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

+0

谢谢 - 我会尝试一些配置选项以及检查实例变量的使用情况。我没有看到作业保留在状态设置为失败的数据库中。它只是被删除,就好像它已成功完成。 – 2012-07-31 11:15:17

+0

正如iltempo设置delayed_job描述记录更多的信息显示问题所示http://stackoverflow.com/questions/7886272/delayed-job-nomethoderror这意味着我可以看到一个问题,因为日志显示它正在序列化对象,而不是一个类。换句话说,就是回到Object的最低公分母。对该方法的进一步调查显示实例变量未被正确引用的问题。 – 2012-08-02 02:41:04

+0

嗨格兰特,你能告诉我在哪里可以找到日志?我有和你一样的问题。 – jlstr 2012-08-13 20:49:14