Heroku Cron不会跑

时间:2011-06-15 03:27:53

标签: ruby-on-rails ruby-on-rails-3 cron heroku crontab

所以,我在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文件(每4小时放一次)

 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

不确定为什么它不会只做看跌期权。此外,一旦这个工作,我想经常调用我的模型中的函数。如果我的模型是Micropost并且函数是has_fun,我可以用cron.rake中的Micropost.has_fun调用它吗?

任何帮助都不仅仅是值得赞赏的。堆栈溢出的人对我学习rails是一个不可思议的帮助。再次感谢。

更新 我将看跌期权改为:

UserMailer.registration_confirmation().deliver

但是,这会导致相同的日志输出。我已经多次使用actionmailer测试了registration_confirmation电子邮件,他们使用上述功能。 (该电子邮件在user_mailer.rb中编码为static。

2 个答案:

答案 0 :(得分:0)

您应该尝试使用rufus调度程序:

安装宝石

 gem install rufus-scheduler

确保将gem包含在bundler中,或者包含它。

然后你需要创建一个名为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

答案 1 :(得分:0)

Thoughtbot不久前发表了a blog post概述了一种使用RSpec,Timecop和Bourne在本地测试Heroku cron作业的方法。