2013-09-05 32 views
1

我使用Clockworkd在后台运行发条。如果我只是运行发条,它会成功执行rake命令。如果我通过clockworkd运行它,它会产生一个错误。我不确定它为什么不起作用。任何意见/建议,将不胜感激。发条/ Clockworkd产生'没有找到Rakefile(寻找:rakefile,Rakefile,rakefile.rb,Rakefile.rb)'

启动clockworkd

RAILS_ENV=production clockworkd -c lib/clock.rb start --log 

错误

I, [2013-09-05T17:53:01.035923 #2580] INFO -- : Triggering 'Get Updates' 
rake aborted! 
No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb) 
/Users/lukesmith/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.1.0/lib/rake/application.rb:632:in `raw_load_rakefile' 
/Users/lukesmith/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.1.0/lib/rake/application.rb:94:in `block in load_rakefile' 
/Users/lukesmith/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.1.0/lib/rake/application.rb:165:in `standard_exception_handling' 
/Users/lukesmith/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.1.0/lib/rake/application.rb:93:in `load_rakefile' 
/Users/lukesmith/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.1.0/lib/rake/application.rb:77:in `block in run' 
/Users/lukesmith/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.1.0/lib/rake/application.rb:165:in `standard_exception_handling' 
/Users/lukesmith/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.1.0/lib/rake/application.rb:75:in `run' 
/Users/lukesmith/.rvm/gems/ruby-1.9.3-p327/gems/rake-10.1.0/bin/rake:33:in `<top (required)>' 
/Users/lukesmith/.rvm/gems/ruby-1.9.3-p327/bin/rake:23:in `load' 
/Users/lukesmith/.rvm/gems/ruby-1.9.3-p327/bin/rake:23:in `<main>' 

clock.rb

require 'clockwork' 
require File.expand_path('../../config/boot', __FILE__) 
require File.expand_path('../../config/environment', __FILE__) 

include Clockwork 

handler do |job| 
    puts "Running #{job}" 
end 

every(1.hour, 'Get Updates') { `rake get_updates` } 

回答

0

运行过程哟您的rake get_updates任务可能与您的Rakefile不在同一工作目录中。

你既可以Dir.chdir '/dir/containing/Rakefile/',或者明确地使用-f选项传递路径Rake文件:

every(1.hour, 'Get Updates') do 
    Dir.chdir '/dir/containing/Rakefile/' 
    `rake get_updates` 
end 
+1

我链接到文件,但后来它扔了错误“不知道如何建设任务'环境''。所以我猜测它没有像发条一样运行它,因为它无法在Rails应用程序的上下文中运行任何东西。在我的rake文件中引用任务定义的环境(我假设) - > task:get_updates =>:environment do –

+0

啊,你可能需要做'chdir',因为你的整个过程可能需要在您的应用程序的顶层目录,以便Rake了解内置的Rails Rake任务。我更新了我的答案,事先包含'Dir.chdir',并删除了显式的'-f'选项。 –