Ruby on rails 为什么延迟作业不从数据库加载我的序列化参数?
当我安排延迟的工作时,我会按照通常的方式进行:Ruby on rails 为什么延迟作业不从数据库加载我的序列化参数?,ruby-on-rails,ruby,delayed-job,Ruby On Rails,Ruby,Delayed Job,当我安排延迟的工作时,我会按照通常的方式进行: NotificationMailer.delay.notify(self, @current_user) 如果我在工作人员看到延迟::作业队列上的对象之前查看它,我可以在处理程序中看到我的序列化参数current_user: [33] my_project » Delayed::Job.first Delayed::Backend::ActiveRecord::Job Load (0.7ms) SELECT "delayed_jobs".
NotificationMailer.delay.notify(self, @current_user)
如果我在工作人员看到延迟::作业队列上的对象之前查看它,我可以在处理程序中看到我的序列化参数current_user:
[33] my_project » Delayed::Job.first
Delayed::Backend::ActiveRecord::Job Load (0.7ms) SELECT "delayed_jobs".* FROM "delayed_jobs" ORDER BY "delayed_jobs"."id" ASC LIMIT 1
=> #<Delayed::Backend::ActiveRecord::Job:0x0000010d546fb0> {
:id => 764161,
:priority => 0,
:attempts => 0,
:handler => "--- !ruby/object:Delayed::PerformableMailer\nobject: !ruby/class 'SurveyCompletionNotificationMailer'\nmethod_name: :notify\nargs:\n- !ruby/ActiveRecord:MyInstance\n attributes:\n id: 10786\n created_at: 2013-12-19 03:52:21.082910000 Z\n updated_at: 2014-07-23 19:12:27.967755000 Z\n delta: true\n- !ruby/ActiveRecord:User\n attributes:\n id: 30\n first_name: Andrew\n last_name: Anderson\n created_at: 2013-01-16 16:40:20.980147000 Z\n updated_at: 2013-01-16 16:40:20.980147000 Z\n title: Compensation Analyst\n primary_phone_number: '123456789'\n supervisor_id: \n status: modified\n disabled: \n prefix: \n suffix: ''\n department: ''\n general_info: ''\n contact_id: 4428\n emulating: true\n",
:last_error => nil,
:run_at => Wed, 23 Jul 2014 14:12:27 CDT -05:00,
:locked_at => nil,
:failed_at => nil,
:locked_by => nil,
:queue => nil,
:created_at => Wed, 23 Jul 2014 14:12:27 CDT -05:00,
:updated_at => Wed, 23 Jul 2014 14:12:27 CDT -05:00
}
但我发现延迟的作业将忽略序列化的参数数据,并从数据库重新加载用户记录。因此,如果用户记录在作业排队和执行之间发生更改,则将使用新数据。这不是我想要的。如果您不打算使用它,为什么还要费心序列化参数呢?我错过什么了吗?有没有办法让DJ使用序列化的参数数据?这是DJ的行为,它只是使用反序列化的id从DB加载ActiveRecord对象,这是一个相关的FAQ条目。如果您想让它做一些不同的事情,您可能需要monkeypatch ActiveRecord,或者将属性作为附加参数传递给邮件程序。这不是我想要的答案,但我认为我应该接受它,因为它似乎是正确的。