10

毎日のタスクをスケジュールしたい : 毎日午前 7 時に、(人間の介入なしで) メールを送信したい。

私はRoRフレームワークに取り組んでいますが、それを行うための最良の方法は何ですか?

BackgrounDRB、OpenWFEru スケジューラ、または Cron ベースのものについて聞いたことがありますが、初心者であり、どれが自分のニーズに合わせて作成されているかわかりません。

4

5 に答える 5

13

もう 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に入れる必要があるかもしれないことに注意してください。

于 2009-02-16T18:37:47.937 に答える
7

私はこのブログ投稿で議論されているrufus-schedulerの宝石に感銘を受けました(そして試してみる予定です)

彼は次のようなことを説明しています。

scheduler = Rufus::Scheduler.start_new  

scheduler.every("1m") do  
   DailyDigest.send_digest!  
end 

..これはかなり単純なようです。HTMLベースの構成を追加するのはどれほど簡単だろうか?

于 2009-02-16T16:01:40.697 に答える
2

BackgroundRB は私が使用しているもので、完璧に機能します。BackgroundRB によって生成された複数の電子メールが送信されています。また、その他のタスクもあります。スケジュールされたタスクと非同期タスク (通常のクライアント/サーバーの応答サイクルよりも時間がかかるタスク) の両方が有効になるためです。

私はそれを使用し、私はそれにとても満足しています。

于 2009-02-16T23:17:14.677 に答える
1

これを処理するモデルの 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形式に関する説明がたくさんあり、簡単に理解できるはずです。

于 2009-02-16T15:35:00.153 に答える
0

受け入れられた答えがすでに言っているように、rakeタスクとcronジョブを実行します。ただし、cronファイル自体の更新は手動の作業であることに注意してください。開発中に変更しない場合は問題ないかもしれません。それ以外の場合は、ここでCapistranoに実行させる方法を説明します:http://push.cx/2008/deploying-crontab-with-your-rails-app

于 2009-02-18T07:01:50.290 に答える