2015-11-13 35 views
3

我有一個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發送這些電子郵件作爲未來的提醒。非常感謝您的幫助!

回答

3

由於你正在做User.new,你不會將該用戶保存到數據庫中。當作業開始時,數據庫中沒有用戶可以拉動。如果你做User.create,而應該按預期工作。

下面是描述活動作業,以及如何使用它的文章的鏈接:http://www.sitepoint.com/new-rails-shiny-activejob/

+1

下面是這個工作的原因的一些詳細信息。 deliver_later依賴於全局標識來安排/排隊作業(這是一種通過將數據保存在數據庫中並在稍後使用該標識進行檢索來避免串行化整個對象的方法)。由於全局ID僅在保存時創建,因此在您的測試中查找時缺失。 .create方法在幕後調用.new和.save。 –