【问题标题】:Delayed_job not sending email with ActiveMailer 3.xDelayed_job 不使用 ActiveMailer 3.x 发送电子邮件
【发布时间】:2012-07-31 15:11:41
【问题描述】:

我已经安装了用于 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 指示到 delay_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: 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

worker 作业通过 rake 任务启动

rake jobs:work

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

在不使用delayed_job 方法进行测试时,电子邮件进程正常工作

MemberMailer.all_member_email(m, @message).deliver

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

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

【问题讨论】:

  • MememberMailer 在哪里?在不使用delay 的情况下工作吗?在 all_meember_email 中记录一些东西怎么样?
  • 在启动 rails server 之前是否使用命令 script/delayed_job start 启动了延迟作业服务器???
  • 我已经毫不拖延地测试了 MemberMailer,它工作正常
  • 我只是在启动 rails 后才启动 script/delayed_job start 所以我会试试你的建议。

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


【解决方案1】:

根据您的描述,我希望工人正确地完成工作。当工作人员认为它的工作已经完成并且没有发生异常时,该工作就会从队列中删除。

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

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

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

【讨论】:

  • 谢谢 - 我会尝试一些配置选项以及检查实例变量的使用情况。我没有看到状态设置为失败的作业保留在数据库中。它被简单地删除了,就好像它已经成功完成了一样。
  • 正如 iltempo 所描述的,设置delayed_job 来记录更多信息显示了stackoverflow.com/questions/7886272/delayed-job-nomethoderror 中所示的问题,这意味着我可以看到一个问题,因为日志显示它正在序列化一个对象,而不是一个类。换句话说,回归到 Object 的最低公分母上。对该方法的进一步调查显示一个实例变量没有被正确引用的问题。
  • 嗨,格兰特,您能告诉我在哪里可以找到日志吗?我遇到了和你一样的问题。
猜你喜欢
  • 2012-01-25
  • 2017-02-22
  • 2022-08-15
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多