Rake任务不发送邮件导航

时间:2016-12-20 12:37:57

标签: ruby-on-rails ruby heroku rake rake-task

我已经在rails中编写了我的第一个rake任务,我已经使用Heroku调度程序设置它并且它正在运行,但是邮件没有被发送。我的邮件设置很好,因为我将其用于其他各种事情,我想在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

通过运行rake uncomplete_form我得到了

提醒不完整报价单

的用户

进行。

跑步     heroku运行rake 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.

它似乎没有找到任何快速接触 - 但是如果我在控制台中运行:

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

接着是

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

确实找到了预期的联系人

2 个答案:

答案 0 :(得分:3)

你试过吗

QuickcontactMailer.uncomplete_form(@quickcontact).deliver_now

编辑:什么是.p_p应该是什么?您正在使用if子句进行赋值,而不是我认为应该进行比较(?)

if quickcontact.p_p = nil

答案 1 :(得分:1)

解决:我的两个错误。感谢第一个@matija的帮助。问题出在我的rake任务代码上。第一个错误是我'如果quickcontact.p_p = nil'需要更改为'if quickcontact.p_p.nil?' - 我不小心分配了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