2012-03-22 14 views
3

ユーザーに前月のタイムシートを提出したかどうかを確認する方法がありますが、そうでない場合は電子メールリマインダーが送信されます。この方法は毎日実行する必要があります。このメソッドを実際にトリガするアクションはありません。毎日設定された時間に実行されます。Rails 3で1日に1回実行するメソッドをスケジュールします

これをRails 3で実装する最良の方法はありますか?

+0

これにcronジョブを使用できますか? –

+0

私は知らないのですか?私は、アプリケーションをデプロイするときに簡単に設定できる何かのソリューションを、アプリケーションがデプロイされるたびに手動でcronジョブを設定する必要があるので、欲しいと思います。 – link664

+0

cronジョブを設定する必要があるのは一度だけで、毎回最新のrailsコードが自動的に実行されます。私はラップトップに戻ったときに例を掲示します。:) –

答えて

3

方法を実行するレイクタスクを作成して電子メールを配信し、cron生成を自動化できるいつでも宝石を見てください。

https://github.com/javan/whenever

その後、次のと、「設定/ schedule.rb」でいつでも設定ファイルを作成することができます。

every 1.day, :at => '12:00 pm' do 
    rake "timesheet:check"     
end 
0

これは必ずレールアプリの一部として実行する必要がありますか?それはそれ自身のサービスであることを考慮に入れることができますか?

あなたのレールアプリからこの機能を移動して単独で実行することができれば、ルビースクリプトを書き、cronジョブを介してスケジュールされた時間に実行することができます。

あなたのレールアプリには、時間が常にポーリングされ、そのメソッドを呼び出す時間があるかどうかを確認する必要があるため、不必要に乱雑になることがあります。 cronジョブは、あなたのようなタスクのための簡単な方法です。

使用しているオペレーティングシステムを教えていただけたら、私はcronジョブをセットアップするのに役立つリソースを紹介してうれしいです。

+0

OSX上で開発し、Ubuntuを本番環境で使用します。 – link664

+0

開発中にスクリプトを手動で実行することができます。プロダクションサーバーの場合は、このリンクを使用して、スクリプトを実行するために必要なすべての情報を提供する必要があります(https://help.ubuntu.com/community/CronHowto)。 – Nikhil

0

Resque Schedulerをご覧ください。 cronを0 0 * * *に設定すると、スクリプトを毎日実行します。 HereResqueのrailscastsです。

0

私は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 
関連する問題