ユーザーに前月のタイムシートを提出したかどうかを確認する方法がありますが、そうでない場合は電子メールリマインダーが送信されます。この方法は毎日実行する必要があります。このメソッドを実際にトリガするアクションはありません。毎日設定された時間に実行されます。Rails 3で1日に1回実行するメソッドをスケジュールします
これをRails 3で実装する最良の方法はありますか?
ユーザーに前月のタイムシートを提出したかどうかを確認する方法がありますが、そうでない場合は電子メールリマインダーが送信されます。この方法は毎日実行する必要があります。このメソッドを実際にトリガするアクションはありません。毎日設定された時間に実行されます。Rails 3で1日に1回実行するメソッドをスケジュールします
これをRails 3で実装する最良の方法はありますか?
方法を実行するレイクタスクを作成して電子メールを配信し、cron生成を自動化できるいつでも宝石を見てください。
https://github.com/javan/whenever
その後、次のと、「設定/ schedule.rb」でいつでも設定ファイルを作成することができます。
every 1.day, :at => '12:00 pm' do
rake "timesheet:check"
end
これは必ずレールアプリの一部として実行する必要がありますか?それはそれ自身のサービスであることを考慮に入れることができますか?
あなたのレールアプリからこの機能を移動して単独で実行することができれば、ルビースクリプトを書き、cronジョブを介してスケジュールされた時間に実行することができます。
あなたのレールアプリには、時間が常にポーリングされ、そのメソッドを呼び出す時間があるかどうかを確認する必要があるため、不必要に乱雑になることがあります。 cronジョブは、あなたのようなタスクのための簡単な方法です。
使用しているオペレーティングシステムを教えていただけたら、私はcronジョブをセットアップするのに役立つリソースを紹介してうれしいです。
Resque Schedulerをご覧ください。 cronを0 0 * * *
に設定すると、スクリプトを毎日実行します。 HereはResqueのrailscastsです。
私はMac OS Xで、本番機をCentOS上で開発していますが、これはUbuntuにも当てはまります。
私はreport.rake
namespace :report do
desc "Email stats"
task :email_global_stats, [] => :environment do |t, args|
StatsMailer.global_stats_email.deliver
end
end
そしてそれはStatsMailer
で定義されている電子メールで送信する新しい統計情報をチェックするロジックの大部分で定義されてrakeタスクを持っています。そして、本番マシン上で、私は(crontab -e
を介してアクセスする)私のcrontabでこれを持っている:
30 7 * * * RAILS_ENV=production /usr/local/bin/rake -f /home/user/code/stats/current/Rakefile report:email_global_stats
私はすべて真夜中に実行していないだけというように、それは、午前7時30分AMに設定されています。そして、私はローカルでテストしたいと思います。
rake report:email_global_stats
私の開発ディレクトリからです。
sudo postfix start
これにcronジョブを使用できますか? –
私は知らないのですか?私は、アプリケーションをデプロイするときに簡単に設定できる何かのソリューションを、アプリケーションがデプロイされるたびに手動でcronジョブを設定する必要があるので、欲しいと思います。 – link664
cronジョブを設定する必要があるのは一度だけで、毎回最新のrailsコードが自動的に実行されます。私はラップトップに戻ったときに例を掲示します。:) –