Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails中的Cronjob_Ruby On Rails_Ruby_Cron_Whenever - Fatal编程技术网

Ruby on rails RubyonRails中的Cronjob

Ruby 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

使用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,并添加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
。现在清楚了吗?