在 rake 任务中调用 class 方法,没有任何反应

Calling class method within rake task, nothing happening

所以我有一个 class 方法,它非常适合我的 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 秒,就像它做某事,但没有错误被传回或任何事情都没有发生。当我只是从命令行 运行 class 方法并且没有发送电子邮件时,数据库中没有订单被标记为已完成。

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

我被 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