Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么延迟作业不从数据库加载我的序列化参数?_Ruby On Rails_Ruby_Delayed Job - Fatal编程技术网

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,或者将属性作为附加参数传递给邮件程序。

这不是我想要的答案,但我认为我应该接受它,因为它似乎是正确的。