8

cron タスクを使用して、ネットワーク上のすべてのユーザーに更新の電子メールを毎日送信するための最良の方法は何ですか? 電子メールは、複数のモデルからのさまざまな情報で構成されます。

リクエストモデルとユーザーモデルから「1つの新しい友達リクエスト:名前...」と、イベントとユーザーモデルから「あなたの友達からの3つのイベントがあります:名前でホストされているイベント... のようなことをしたい.

これは一般的なタスクだと思いますが、あまり情報がありませんでした。そのため、このようなことを行うための一般的なヒントがあれば大歓迎です!

補足: 私は Heroku デイリー cron プラグインを使用して、それが問題になる場合にこれを達成します (そうすべきではないと思いますが)。

4

2 に答える 2

10

私は通常、rake タスクを作成して CRON に追加します。

レーキ タスクは次のようになります。

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 ジェムを使用することをお勧めします。これにより、rake タスクを作成する必要がなくなり、より適切な cron 構文が得られます。

app/mailers/my_mailer.rb:

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

config/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
于 2013-10-28T22:00:14.490 に答える