Cronjob在铁轨上的红宝石

时间:2015-08-15 17:16:29

标签: ruby-on-rails ruby cron whenever

使用when gem时在rails上的ruby中创建一个cronjob。

set :environment, "development"
set :output, {:error => "log/cron_error_log.log" , :standard => "log/cron_log.log" }
every '* * * * * ' do
   command "puts 'you can use raw cron syntax too'"
end

还要更新crontab,它还会添加crontab列表。但是当我通过

手动测试时
/home/haseebahmad/projects/social/config/schedule.rb

它给出了错误

/home/haseebahmad/projects/social/config/schedule.rb: line 19: every: command not found
/home/haseebahmad/projects/social/config/schedule.rb: line 20: puts 'you can use raw cron syntax too': command not found
/home/haseebahmad/projects/social/config/schedule.rb: line 21: end: command not found

它无法正常工作,我该如何解决呢

2 个答案:

答案 0 :(得分:2)

尽管有一些方法可以在Rails环境中运行计划任务,例如script/runnerRake等等,其中,rake方法非常简单方便,也受到heroku等流行部署平台的支持。

要定义rake任务,您需要在Rails应用程序的lib/tasks目录中创建一个文件:lib/tasks/my_cron.rake并按照以下方式定义任务:

task :my_cron => :environment do
  puts "doing stuff...."
  SomeClass.do_some_stuff
  puts "done."
end

然后,要运行此rake任务,您只需从命令行运行此rake命令:

rake my_cron

如果您为rake任务提供rake -T,则可以运行:desc命令查看Rails应用程序中的所有可用rake任务:

desc 'Running my cron task...'  
task :my_cron => :environment do
  puts "doing stuff...."
  SomeClass.do_some_stuff
  puts "done."
end

然后,当你运行这个:rake -T时,这个rake任务将显示在rake taska列表中!

使用heroku scheduler

可以非常轻松地在heroku上安排这些rake任务

当rake任务工作得很好时,可能会出现你可能想要在后台处理大量工作的情况,在这种情况下,可以使用几个最受欢迎的红宝石宝石resquesidekiq ,取决于你的需要。

答案 1 :(得分:1)

我建议将ruby命令/脚本移动到rake任务。

这样你就可以通过rake测试ruby命令是否正常工作,即ruby是由rake处理的。

然后你只需要在cron作业中运行rake命令。所以你不需要测试cron,这是一个痛苦的屁股。