我刚刚获得了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
先谢谢你的帮助,
最诚挚的问候。
答案 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