【发布时间】: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