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