使用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
它无法正常工作,我该如何解决呢
答案 0 :(得分:2)
尽管有一些方法可以在Rails环境中运行计划任务,例如script/runner
和Rake
等等,其中,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列表中!
当rake任务工作得很好时,可能会出现你可能想要在后台处理大量工作的情况,在这种情况下,可以使用几个最受欢迎的红宝石宝石resque和sidekiq ,取决于你的需要。
答案 1 :(得分:1)
我建议将ruby命令/脚本移动到rake任务。
这样你就可以通过rake测试ruby命令是否正常工作,即ruby是由rake处理的。
然后你只需要在cron作业中运行rake命令。所以你不需要测试cron,这是一个痛苦的屁股。