我有一個Ruby on Rails應用程序,我需要在面試前一天發送應聘者提醒郵件。爲此,我計劃使用The Rescue Scheduler,我正在使用rails v 4.2。我已經運行Redis的服務器我的代碼如下:resque rails 4.2 deliver_later郵寄者
def sendemails
@user2=User.new(:firstname=> "Betterlucknexttime",:email=>)
SendEmailJob.new.perform(@user)
end
,並在sendEmail文件
class SendEmailJob < ActiveJob::Base
queue_as :default
def perform(user)
UserMailer.welcome_email(user).deliver_later
end
end
在配置/研究與開發我已經設置config.active_job.queue_adapter = :resque
我檢查我的日誌文件,這是我看到:
[ActiveJob] Could not log "enqueue.active_job" event. URI::GID::MissingModelIdError: Unable to create a Global ID for User without a model id. app/jobs/send_email_job.rb:5:in perform'
app/controllers/adminusers_controller.rb:45:in sendemails'
我一般,當我不使用deliver_later選項,我可以立即獲得我的電子郵件。不過,我需要使用deliver_later發送這些電子郵件作爲未來的提醒。非常感謝您的幫助!
下面是這個工作的原因的一些詳細信息。 deliver_later依賴於全局標識來安排/排隊作業(這是一種通過將數據保存在數據庫中並在稍後使用該標識進行檢索來避免串行化整個對象的方法)。由於全局ID僅在保存時創建,因此在您的測試中查找時缺失。 .create方法在幕後調用.new和.save。 –