使用cron任务向网络上的所有用户发送每日更新电子邮件的最佳方法是什么?电子邮件将由来自多个模型的不同信息组成。
我想从请求模型和用户模型中执行类似“1个新朋友请求:名称 ...”的内容,并且“您的朋友有3个即将发生的事件:事件名称由 name ...“托管,来自事件和用户模型。
我意识到这是一项常见任务,但我没有看到太多关于它的信息,因此任何关于做这样的事情的一般提示都将非常感谢!
旁注:如果重要的话,我会使用Heroku daily cron插件来完成这项工作(尽管我认为不应该这样做)。
答案 0 :(得分:8)
我通常只是编写一个rake任务并将其添加到CRON。
rake任务将如下所示:
namespace :notifications do
desc "Sends notifications"
task :send => :environment do
MyModel.all_users_to_notify.each do |u|
MyMailer.notification(u).deliver
end
end
end
你的crontab应该是这样的:
RAILS_ENV=production
HOME=/path/to/your/rails/app
PATH=/path/to/ruby/binaries
30 17 * * * rake notifications:send
答案 1 :(得分:1)
如果其他人正在寻找这个答案,我建议使用whenever gem来执行cron任务。这将使您不必编写rake任务,并为您提供更好的cron语法:
应用程序/邮寄者/ my_mailer.rb:
class MyMailer < ActionMailer::Base
def my_email
...
end
end
配置/ schedule.rb
job_type :runner, "cd :path && rvm 2.0.0 do bundle exec script/rails runner -e :environment ':task' :output"
every 1.days, at: "7:00 am", roles: [:app] do
runner "MyMailer.my_email.deliver"
end