在 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
)
所以我有一个 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
)