Ruby on rails RubyonRails中的Cronjob
使用gem在rubyonrails中创建cronjobRuby on rails RubyonRails中的Cronjob,ruby-on-rails,ruby,cron,whenever,Ruby On Rails,Ruby,Cron,Whenever,使用gem在rubyonrails中创建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,并添加cront
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
它不能正常工作,我如何解决它呢?我建议将ruby命令/脚本转移到rake任务中 通过这种方式,您可以通过rake测试ruby命令是否正常工作,即ruby内容由rake处理
然后您只需要在cron作业中运行rake命令。所以你不需要测试cron,这是一个让人头疼的问题 尽管在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
desc 'Running my cron task...'
task :my_cron => :environment do
puts "doing stuff...."
SomeClass.do_some_stuff
puts "done."
end
然后,要运行此rake任务,您可以从命令行运行此rake命令:
rake my_cron
如果向rake任务提供如下desc
,则可以运行:rake-T
命令查看Rails应用程序中的所有可用rake任务:
task :my_cron => :environment do
puts "doing stuff...."
SomeClass.do_some_stuff
puts "done."
end
desc 'Running my cron task...'
task :my_cron => :environment do
puts "doing stuff...."
SomeClass.do_some_stuff
puts "done."
end
然后,当您运行以下命令时:rake-T
,此rake任务将显示在rake任务列表中
这些rake任务可以很容易地在heroku上使用
当rake任务工作得很好时,可能会出现您希望在后台处理大量作业的情况,在这些情况下,可以使用两个最流行的ruby gems,具体取决于您的需要。当您手动测试时,脚本不知道
每个函数来自何处。Rails将自动加载gem,而不会让您使用require
语句将gem包括在内。如果要通过运行脚本进行手动测试,则需要包含将gem引入范围的require
语句。安装gem后是否启动了服务器。。我希望你没有。贾斯汀,还有其他的测试方法吗?奥雅纳已经重启了服务器谢谢……。还有一件事,我在一个例子中看到他们在任务中使用了名称空间。你能告诉我它的用途吗?名称空间
基本上用于分组和组织多个任务。例如,如果在Rails应用程序的任何目录中点击rake-T
,您将看到不同的rake任务,如rake db:create
,rake db:migrate
,rake db:drop
等任务。这些都是与数据库相关的任务,并分组在同一命名空间下db
。现在清楚了吗?