Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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 3 延迟的作业操作邮件缓存?_Ruby On Rails 3_Actionmailer_Delayed Job - Fatal编程技术网

Ruby on rails 3 延迟的作业操作邮件缓存?

Ruby on rails 3 延迟的作业操作邮件缓存?,ruby-on-rails-3,actionmailer,delayed-job,Ruby On Rails 3,Actionmailer,Delayed Job,我现在打电话给一个延迟的作业(gem delayed_job_mongoid)发送确认电子邮件。但是,它似乎没有使用我传递的最新数据,而是使用缓存版本。见下文: 我的控制器: ... _user.calculate_orders _user.save _user.reload Mailer.delay.order_reported(_user) ... 邮递员 class Mailer < Devise::Mailer def order_reported(to_user)

我现在打电话给一个延迟的作业(gem delayed_job_mongoid)发送确认电子邮件。但是,它似乎没有使用我传递的最新数据,而是使用缓存版本。见下文:

我的控制器:

...
_user.calculate_orders
_user.save
_user.reload
Mailer.delay.order_reported(_user)
...
邮递员

class Mailer < Devise::Mailer
  def order_reported(to_user)
    @to_user = to_user
    email_with_name = "#{@to_user.name} <#{@to_user.email}>"
    mail(:to => email_with_name, :subject => "Test email")
  end
end
这不起作用,并且使用缓存数据

Mailer.delay.order_reported(u)

我最近遇到了一个非常类似的问题,与传入我的用户对象的序列化版本有关,而不仅仅是ID

在延迟方法中,我会稍微进行重构,只将简单对象作为参数传递。因此,您可以这样做:

Mailer.delay.order_reported(_user.id)
然后将方法更新为如下所示:

class Mailer < Devise::Mailer
  def order_reported(to_user_id)
    @to_user = User.find(to_user_id)
    email_with_name = "#{@to_user.name} <#{@to_user.email}>"
    mail(:to => email_with_name, :subject => "Test email")
  end
end
class-Mailer带有名称的电子邮件,:主题=>“测试电子邮件”)
结束
结束

这将确保在邮件实际送达时,您总能获得一个新的用户对象。

嗨,蒂姆,谢谢您的建议。我试过了,但它似乎仍在缓存旧对象。只有重新启动DJ worker时,它才会重新加载。然后我尝试了@to_user=user.find(to_user\u id).reload,这似乎很有效,但效率不是很低吗?不,因为您需要从数据库中加载对象。它将结束我们作为一个简单的选择查询,可以很容易地缓存的数据库。谢谢。奇怪的是,.find()不起作用,但.find().reload起作用,即使它是另一个工作程序。
class Mailer < Devise::Mailer
  def order_reported(to_user_id)
    @to_user = User.find(to_user_id)
    email_with_name = "#{@to_user.name} <#{@to_user.email}>"
    mail(:to => email_with_name, :subject => "Test email")
  end
end