问题描述
|
* * * * * /bin/bash -l -c \'cd /Users/boris/projects/MyApp/ && rails runner \"Resque.enqueue(Place)\"\'
基本上,我需要执行以下操作:
用RVM加载Ruby
导航到MyApp
Dir
运行以下行:rails runner \"Resque.enqueue(Place)
上面的cron似乎正在运行,但是它会在rails运行程序中产生以下错误
这是怎么回事?
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/dependency.rb:52:in `initialize\': Valid types are [:development,:runtime],not nil (ArgumentError)
from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:359:in `new\'
from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:359:in `search\'
from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:354:in `gems_size\'
from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:179:in `resolve\'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/source_index.rb:95:in `sort_by\'
from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:175:in `each\'
from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:175:in `sort_by\'
from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:175:in `resolve\'
from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:160:in `start\'
from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:128:in `resolve\'
from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:127:in `catch\'
from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/resolver.rb:127:in `resolve\'
from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/deFinition.rb:151:in `resolve\'
from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/deFinition.rb:90:in `specs\'
from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/deFinition.rb:135:in `specs_for\'
from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/deFinition.rb:124:in `requested_specs\'
from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/environment.rb:23:in `requested_specs\'
from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/runtime.rb:11:in `setup\'
from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler.rb:107:in `setup\'
from /Users/boris/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/setup.rb:6
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require\'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:36:in `require\'
from /Users/boris/projects/chaggregator/config/boot.rb:6
from script/rails:5:in `require\'
from script/rails:5
解决方法
实际上,执行此操作的最佳方法是使用rvm包装器。您可以这样创建一个包装器:
rvm wrapper ruby-1.9.3-p0@somegemset appname rails
二进制文件可以是rails,rake,gem或其他已安装的红宝石二进制文件。发生的情况是rvm创建了一个包装器,该包装器将在执行rails命令之前提供正确的rvm环境。在系统范围的rvm上,通常将包装器放在/ usr / local / rvm / bin /
现在,从cron您可以执行以下操作:
*/3 * * * * cd /path/to/your/app && appname_rails runner \"Resque.enqueue(Place)\" -e production
这将进入您的应用程序目录,并每3分钟执行一次刚刚创建的rvm包装器。本示例基于rails 3和生产环境。
,在运行任何Ruby代码之前,您需要通过RVM提供正确的环境。因此,在命令中包含以下内容:
source /usr/local/rvm/environments/ruby-1.9.2-p180@my-gemset
因此,潜在的解决方案是:
SHELL=/bin/bash
* * * * * source /{path_to_rvm_environment_for_ruby}@{gemset} && cd /Users/boris/projects/MyApp/ && rails runner \"Resque.enqueue(Place)\"\'
,这里有很多动人的部分,这里有一些关于要检查您的环境(红宝石,rvm,捆绑软件)的指针-发布您的发现,然后从那里去。
捆绑器的路径问题,要更改还是不更改?
捆绑错误
我猜命令在cron外部运行正常吗?如果您以其他用户身份运行cron作业,请检查该用户的环境。