Cron Job Errors帮助-Rails Runner错误

问题描述

|
* * * * * /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作业,请检查该用户的环境。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...