8

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

我想从请求模型和用户模型中执行诸如“1 个新朋友请求:名称...”之类的操作,以及来自事件和用户模型的“您的朋友有 3 个即将发生的事件:由名称托管的事件名称...” .

我意识到这是一项常见任务,但我没有看到太多关于它的信息,所以任何关于做这样的事情的一般提示将不胜感激!

旁注:如果这很重要,我将使用 Heroku 每日 cron 插件来完成此任务(尽管我认为不应该这样做)。

4

2 回答 2

10

我通常只是写一个 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
于 2010-10-15T13:34:03.407 回答
2

如果有其他人正在寻找这个答案,我建议对 cron 任务使用when gem。这将使您不必编写 rake 任务,并为您提供更好的 cron 语法:

应用程序/邮件程序/my_mailer.rb:

class MyMailer < ActionMailer::Base
  def my_email
    ...
  end
end

配置/时间表.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
于 2013-10-28T22:00:14.490 回答