2016-12-20 39 views
0

我已經在rails中編寫了我的第一個rake任務,我用Heroku調度程序設置了它,並且它正在運行,但郵件沒有發送。我的郵件設置很好,因爲我將它用於各種其他事情,我會想象這是我的代碼在Rake任務中的問題。任何幫助將非常感激。Rake任務不發送郵件軌道

的lib /任務/ uncomplete_form.rake

desc "Remind users if they haven't completed quote form" 
task uncomplete_form: :environment do 
    puts 'Reminding users of uncomplete quote form' 
    date = Date.parse('december 18 2016') 
    quickcontacts = Quickcontact.where(created_at: date.midnight..Time.now) 
     quickcontacts.each do |quickcontact| 
      next unless quickcontact.created_at > 1.hour.ago 
       if quickcontact.p_p = nil 
        QuickcontactMailer.uncomplete_form(@quickcontact).deliver 
       end 
      end 
    puts 'done.' 
end 

通過運行耙uncomplete_form我得到uncomplete報價表

做的

提醒用戶。

運行 Heroku的運行耙uncomplete_form 我得到

Reminding users of uncomplete quote form 
Quickcontact Load (1.5ms) SELECT "quickcontacts".* FROM "quickcontacts" WHERE ("quickcontacts"."created_at" BETWEEN '2016-12-18 00:00:00.000000' AND '2016-12-20 12:09:23.683977') 
done. 

它似乎並沒有被拾起任何quickcontacts - 但是如果在控制檯我運行:

date = Date.parse('december 18 2016') 

其次

quickcontacts = Quickcontact.where(created_at: date.midnight..Time.now) 

它找到了exp ected接觸

+0

可能是一個時區問題。 Heroku schedular將在UTC工作。嘗試在這種方式進行調試。 – Jayaprakash

+0

我想到了這一點,但UTC時間是在我面前2個小時,一些quickcontacts昨天(十二月十九日)創建,所以它不應該有所作爲,我不認爲。 – DanRio

回答

3

你試過

QuickcontactMailer.uncomplete_form(@quickcontact).deliver_now 

編輯:什麼是.p_p應該是?你正在做的任務,如果條款,而不是我認爲應該比較(?)

if quickcontact.p_p = nil 
+0

剛剛嘗試過,但沒有改變 – DanRio

+0

啊我有多愚蠢......它應該是檢查p_p是否爲零 - 不分配值。 (p_p是引用表單的最後一部分,所以如果沒有完成 - 表單不完整 - 引發未完成的表單郵件) 所以我應該使用'if quickcontact.p_p == nil',或者更好的方式'if quickcontact.p_p.nil?我想應該這樣做。謝謝,我會讓你知道它是否有效。 – DanRio

1

解決:我的部分兩個不好的錯誤。感謝第一個@matija的幫助。問題出在我的耙子任務代碼上。第一個錯誤是我的'如果quickcontact.p_p = nil'需要更改爲'如果quickcontact.p_p.nil?' - 我意外地分配了零值,而不是檢查它。 第二個錯誤是在下一行中,quickcontact不應該是一個實例變量。這是更新的功能代碼:

desc "Remind users if they haven't completed quote form" 
task uncomplete_form: :environment do 
    puts 'Reminding users of uncomplete quote form' 
    date = Date.parse('december 18 2016') 
    quickcontacts = Quickcontact.where(created_at: date.midnight..Time.now) 
     quickcontacts.each do |quickcontact| 
      next unless quickcontact.created_at > 1.hour.ago 
       if quickcontact.p_p.nil? 
        QuickcontactMailer.uncomplete_form(quickcontact).deliver 
      end 
     end 
puts 'done.' 
end