毎日のタスクをスケジュールしたい : 毎日午前 7 時に、(人間の介入なしで) メールを送信したい。
私はRoRフレームワークに取り組んでいますが、それを行うための最良の方法は何ですか?
BackgrounDRB、OpenWFEru スケジューラ、または Cron ベースのものについて聞いたことがありますが、初心者であり、どれが自分のニーズに合わせて作成されているかわかりません。
毎日のタスクをスケジュールしたい : 毎日午前 7 時に、(人間の介入なしで) メールを送信したい。
私はRoRフレームワークに取り組んでいますが、それを行うための最良の方法は何ですか?
BackgrounDRB、OpenWFEru スケジューラ、または Cron ベースのものについて聞いたことがありますが、初心者であり、どれが自分のニーズに合わせて作成されているかわかりません。
もう 1 つのオプションは、cron ジョブによって実行される rake タスクを作成することです。これを行うには、ファイルsome_file.rake
を作成してlib/tasks
フォルダーに配置します。ファイルは次のようになります。
レール 2.x:
task :send_daily_mail, :needs => :environment do
Model.send_daily_mail
end
レール 3.x:
task :send_daily_mail => :environment do
Model.send_daily_mail
end
次に、cron を使用して、好きなだけ実行します。
cd /path/to/app && /usr/bin/rake send_daily_mail
RAILS_ENV=production
アプリがデフォルトで開発モードになっている場合は、crontabに入れる必要があるかもしれないことに注意してください。
私はこのブログ投稿で議論されているrufus-schedulerの宝石に感銘を受けました(そして試してみる予定です)
彼は次のようなことを説明しています。
scheduler = Rufus::Scheduler.start_new
scheduler.every("1m") do
DailyDigest.send_digest!
end
..これはかなり単純なようです。HTMLベースの構成を追加するのはどれほど簡単だろうか?
BackgroundRB は私が使用しているもので、完璧に機能します。BackgroundRB によって生成された複数の電子メールが送信されています。また、その他のタスクもあります。スケジュールされたタスクと非同期タスク (通常のクライアント/サーバーの応答サイクルよりも時間がかかるタスク) の両方が有効になるためです。
私はそれを使用し、私はそれにとても満足しています。
これを処理するモデルの 1 つにクラス メソッドを追加します。ランナースクリプトを使用してそのメソッドを実行してみてください
./script/runner "MyModel.send_daily_mail" RAILS_ENV=production
すべてが正常に機能することを確認します。そうであれば、プロジェクトへのパスを適切に設定して、コマンドを普遍的に機能させる必要があります。
cd /path/to/my/rails/project && ./script/runner "MyModel.send_daily_mail" RAILS_ENV=production
ランダムなディレクトリに変更して、そのコマンドを実行します。正常に実行される場合は、crontab -e
毎日午前 7 時に実行されるように、セットアップにコマンドを実行して挿入します。グーグルで検索すると、cron形式に関する説明がたくさんあり、簡単に理解できるはずです。
受け入れられた答えがすでに言っているように、rakeタスクとcronジョブを実行します。ただし、cronファイル自体の更新は手動の作業であることに注意してください。開発中に変更しない場合は問題ないかもしれません。それ以外の場合は、ここでCapistranoに実行させる方法を説明します:http://push.cx/2008/deploying-crontab-with-your-rails-app