【问题标题】:Calling class method within rake task, nothing happening在 rake 任务中调用类方法,没有任何反应
【发布时间】:2020-12-23 12:52:18
【问题描述】:

所以我有一个非常适合我的 ApplicationMailer 的类方法。它会找到未完成的订单,将它们转换为 CSV,将它们附加到电子邮件中,然后通过电子邮件将它们发送到预定义的电子邮件地址。

这非常有效。

但是,当我在 rake 任务中调用此方法时,它完全没有任何作用。这是我编写的第一个 rake 任务,我正在尝试将它与 heroku 调度程序一起使用,以便每晚发送要完成的订单。

我的 rake 任务的代码如下:

desc "send daily orders to shipping"
task :send_orders_to_shipping => :environment do
    ApplicationMailer.email_days_orders
end

这个 rake 任务在 rake -vT 中显示为 rake send_orders_to_shipping 但是当我调用“bundle exec rake send_orders_to_shipping”时,命令行似乎暂停了 5-10 秒,就像它在做某事一样,但没有错误传回或什么都没有发生。当我只是从命令行运行类方法并且没有发送电子邮件时,没有订单在数据库中被标记为已完成。

感谢您的帮助,我是 rake 新手,想知道我在阅读中是否遗漏了什么?

herokus 文档指示我放置 :environment 块以使用调度程序插件。这会不会把事情搞砸了?

编辑:这是 ApplicationMailer.email_days_order 的代码,可在命令行中使用。

def email_days_orders
    ordlength = Order.where(fulfilled: false).length
    indordlength = Individualorder.where(fulfilled: false).length

    if ordlength > 0
      attachments["school_orders_#{Date.today}.csv"] = Order.todays_orders_to_csv
    end

    if indordlength > 0
      attachments["individual_orders_#{Date.today}.csv"] = 
      Individualorder.todays_indorders_to_csv
    end

    if ordlength > 0 || indordlength > 0
      mail(to: [ENV['SHIPPING_EMAIL_1'], ENV['SHIPPING_EMAIL_2'], 
      ENV['SHIPPING_EMAIL_3']] ).deliver
    end

end

【问题讨论】:

  • 您忘记实际发送电子邮件。 ApplicationMailer.email_days_orders.deliver_later(或.deliver_now
  • 我在 email_days_orders 方法中调用 .deliver。
  • 另外,email_days_orders 中的任何代码都不会被执行,不仅仅是电子邮件发送部分。
  • 有趣。我猜 rake 任务根本无法启动,但在这种情况下它应该在某处打印错误......
  • ENV 设置正确吗?

标签: ruby scheduled-tasks rake


【解决方案1】:

您忘记实际发送电子邮件。试试ApplicationMailer.email_days_orders.deliver_later(或.deliver_now

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-04
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 2013-03-27
    • 2023-02-04
    相关资源
    最近更新 更多