RoR:使用CRON和Actionmailer向所有用户发送每日电子邮件更新

时间:2010-05-19 13:29:24

标签: ruby-on-rails cron actionmailer

使用cron任务向网络上的所有用户发送每日更新电子邮件的最佳方法是什么?电子邮件将由来自多个模型的不同信息组成。

我想从请求模型和用户模型中执行类似“1个新朋友请求:名称 ...”的内容,并且“您的朋友有3个即将发生的事件:事件名称 name ...“托管,来自事件和用户模型。

我意识到这是一项常见任务,但我没有看到太多关于它的信息,因此任何关于做这样的事情的一般提示都将非常感谢!

旁注:如果重要的话,我会使用Heroku daily cron插件来完成这项工作(尽管我认为不应该这样做)。

2 个答案:

答案 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