2011-06-15 31 views
2

私はherokuで簡単なcronタスクを実行しています。ただし、動作しません。私は、ログにこれを得続ける:Heroku Cronは実行されません

2011-06-15T03:21:35+00:00 heroku[web.1]: State changed from up to bouncing 
2011-06-15T03:21:35+00:00 heroku[web.1]: State changed from created to starting 
2011-06-15T03:21:35+00:00 heroku[slugc]: Slug compilation finished 
2011-06-15T03:21:41+00:00 heroku[web.1]: Starting process with command: `thin -p 5926 -e production -R /home/heroku_rack/heroku.ru start` 
2011-06-15T03:21:46+00:00 app[web.1]: >> Thin web server (v1.2.6 codename Crazy Delicious) 
2011-06-15T03:21:46+00:00 app[web.1]: >> Maximum connections set to 1024 
2011-06-15T03:21:46+00:00 app[web.1]: >> Listening on 0.0.0.0:5926, CTRL+C to stop 
2011-06-15T03:21:47+00:00 heroku[web.1]: State changed from starting to up 
2011-06-15T03:22:30+00:00 heroku[web.1]: Stopping process with SIGTERM 
2011-06-15T03:22:30+00:00 app[web.1]: >> Stopping ... 
2011-06-15T03:22:30+00:00 heroku[web.1]: Process exited 

マイcron.rakeファイルを、それがプットをちょうどしないだろう、なぜ

desc "This task is called by the Heroku cron add-on" 
task :cron => :environment do 
    if Time.now.hour % 4 == 0 # run every four hours 
    puts "Sending email of most popular post." 
    puts "done." 
    end 
end 

わからない(ちょうどプット4時間ごとに行います)。また、これが機能すると、私は頻繁にモデルから関数を呼び出す必要があります。私のモデルがMicropostで、関数がhas_funだったら、私はそれを... Micropost.has_funのcron.rakeで呼び出すことができますか?

ご協力いただければ幸いです。スタックオーバーフローの人々は、私がレールを学ぶための素晴らしい助けとなっています。再度、感謝します。

更新: 私はプットを変更:

UserMailer.registration_confirmation().deliver 

しかし、これは同じログ出力になります。私はactionmailerとregistration_confirmation電子メールを複数回テストして、上記の関数で動作します。 。(メールはuser_mailer.rbで静的として符号化される

+0

ありがとうございました。はい、私はherokuアプリ – chris

+0

にcronアドオンを追加しました。ログからは3時に時刻が表示されていることが分かりません。4,8,12,16,20&0で動作します。 – Salil

+1

私はcronがすぐに実行され、この場合は4時間ごとに実行されると考えました。したがって、cronアドオンのインストール時にすぐに実行する必要があります。私は上記のアップデートを追加しました。私は、actionmailerでテストされた電子メールで電子メールを送信しようとしましたが、結果は同じログに記録されます。私は時間のことについて間違っている可能性があります。私にお知らせください!再度、感謝します。 – chris

答えて

0

あなたはルーファススケジューラを試してみてください:

あなたはバンドラで宝石やしかし、あなたが含めているが含まれていることを確認した宝石

gem install rufus-scheduler 

をインストールします。それ。

次にあなたがtask_scheduler.rbというファイルを作成し、あなたの中にinitializersディレクトリを、これを固執する必要があります。

require 'rufus/scheduler' 
scheduler = Rufus::Scheduler.start_new 

scheduler.every '10m' do 

     puts "Test!"  
     #do something here 

end 

あなたはこのブログの記事を見ることができる任意のトラブルをお持ちの場合:

http://intridea.com/2009/2/13/dead-simple-task-scheduling-in-rails?blog=company

0

ThoughtbotはRSpecの、Timecop、およびボーンを使用してローカルにHerokuのcronジョブをテストするための方法を概説a blog postないが長すぎる前に作られました。

関連する問題