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

Jac*_*kCA 7 cron ruby-on-rails actionmailer

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

我想从请求模型和用户模型中做一些类似"1个新朋友请求:名字 ..."的事情和"来自你的朋友的3个即将发生的事件:由名称托管的事件名称 ......"来自事件和用户模型.

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

旁注:如果重要的话,我将使用Heroku每日cron插件来实现这一点(尽管我认为不应该).

Fáb*_*sta 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
Run Code Online (Sandbox Code Playgroud)

你的crontab应该是这样的:

RAILS_ENV=production
HOME=/path/to/your/rails/app
PATH=/path/to/ruby/binaries

30 17 * * * rake notifications:send
Run Code Online (Sandbox Code Playgroud)

  • 您使用哈希语法来声明任务依赖性.有一个名为`:environment`的任务,其唯一目的是加载Rails环境.如果省略`=>:environment`依赖关系,那么您的任务将在Rails环境之外工作,从而更快地启动并且内存占用更少.这有时很有用,比如删除临时文件等. (2认同)