每小时在heroku上运行一个cron作业的语法是什么?

时间:2011-08-09 14:13:28

标签: ruby-on-rails cron heroku jobs

我刚刚获得了Heroku的cron的付费版本,以便每小时运行一些任务。我想知道的是我应该用它来实际让它每小时运行一次的语法。到目前为止,我有这个,你能告诉我它是否正确:

desc "Tasks called by the Heroku cron add-on"
task :cron => :environment do
  if Time.now.hour % 1 == 0 # run every sixty minutes?

    puts "Updating view counts...."
    Video.update_view_counts  
    puts "Finished....."

    puts "Updating video scores...."
    VideoPost.update_score_caches
    puts "Finished....."

    puts "Erasing videos....."
    Video.erase_videos!
    puts "Finished....."

  end

  if Time.now.hour == 0 # run at midnight

  end
end

我需要知道这条 1 的行是否可行...

if Time.now.hour % 1 == 0

先谢谢你的帮助,

最诚挚的问候。

2 个答案:

答案 0 :(得分:2)

如果您想每小时跑一次,请不要费心检查。 Heroku将每小时运行一次。

由于%1将始终返回0,因此最好只有:

desc "Tasks called by the Heroku cron add-on"
task :cron => :environment do
  puts "Updating view counts...."
  Video.update_view_counts  
  puts "Finished....."
  #...

  if Time.now.hour == 1 #1am
    #...
  end

end

此外,如果您希望能够在需要时运行Video.update_view_counts,则可以改为(在创建rake任务之后):

Rake::Task["video:update_view_counts"].invoke

这样你可以在cron中运行它,并在需要时手动运行

答案 1 :(得分:1)

因为你已经有一个每小时的cron,所以你不必检查运行代码的时间。

task :cron => :environment do

    #<--- hourly cron begins 
    puts "Updating view counts...."
    Video.update_view_counts  
    puts "Finished....."

    puts "Updating video scores...."
    VideoPost.update_score_caches
    puts "Finished....."

    puts "Erasing videos....."
    Video.erase_videos!
    puts "Finished....."
    #hourly cron ends  --->

    if Time.now.hour == 0 # run at midnight

    end  

end