【问题标题】:Rake task not sending mail rails耙任务不发送邮件轨道
【发布时间】:2017-05-05 16:23:58
【问题描述】:

我已经在 Rails 中编写了我的第一个 rake 任务,我已经使用 Heroku 调度程序对其进行了设置,并且它正在运行,但是邮件没有被发送。我的邮件设置很好,因为我将它用于各种其他事情,我想这是我在 rake 任务中的代码的问题。任何帮助将非常感激。

lib/tasks/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 run 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)

它确实找到了预期的联系人

【问题讨论】:

  • 可能是时区问题。 Heroku 计划将在 UTC 上运行。尝试以这种方式调试。
  • 我想过这个问题,但 UTC 时间比我早 2 小时,而且一些快速联系人是昨天(12 月 19 日)创建的,所以我认为应该不会有什么不同。

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


【解决方案1】:

已解决:我的两个严重错误。感谢第一个@matija 的帮助。问题出在我的 rake 任务代码上。第一个错误是我需要将“if 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

【讨论】:

    【解决方案2】:

    你试过了吗

    QuickcontactMailer.uncomplete_form(@quickcontact).deliver_now
    

    ?

    编辑:.p_p 应该是什么?你在那个 if 子句中做赋值,而不是我认为应该是比较(?)

    if quickcontact.p_p = nil
    

    【讨论】:

    • 啊,我多么愚蠢……它应该检查 p_p 是否为 nil - 不分配值。 (p_p 是报价单的最后一部分,所以如果那不完整 - 表格不完整 - 触发不完整的表格邮件)所以我应该使用类似'if quickcontact.p_p == nil',或者更好的是'if quickcontact .p_p.nil?我想应该这样做。谢谢,我会告诉你它是否有效。
    猜你喜欢
    • 1970-01-01
    • 2019-01-16
    • 2023-03-18
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多