0
我目前调用delayed_job(gem delayed_job_mongoid)发送确认邮件。但是,它似乎并未使用我传递的最新数据,而是使用缓存版本。见下文:Delayed_job ActionMailer缓存?
我的控制器:
...
_user.calculate_orders
_user.save
_user.reload
Mailer.delay.order_reported(_user)
...
的Mailer
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
例如,如果一个属性_user.total_orders
= 3被更新到5并保存。它正确地反映到数据库中,延迟工作DB记录包含5更新的信息,但在发送电子邮件时,它用3
我也试着通过导轨控制台调用方法缓存信息:
这个工程,并使用则传递和更新信息
Mailer.order_reported(u).deliver
这不工作,使用缓存的数据
Mailer.delay.order_reported(u)
嗨蒂姆,感谢您的建议。我尝试过,但似乎delayed_job仍然缓存旧对象。它似乎只是重新加载,如果我重新启动DJ工作。然后我尝试@to_user = User.find(to_user_id).reload,这似乎工作,但不是那么低效? – Dean 2013-03-25 10:27:27
不能,因为你需要从数据库中加载对象。它将结束我们作为一个简单的SELECT查询,可以由数据库轻松缓存。 – 2013-03-26 13:19:05
谢谢。很奇怪,.find()不起作用,但.find()。reload做,即使它是一个不同的工作者。 – Dean 2013-03-28 11:48:12