【问题标题】:Cron Job Errors help - Rails Runner errorsCron 作业错误帮助 - Rails Runner 错误
【发布时间】:2011-08-31 07:36:58
【问题描述】:
* * * * * /bin/bash -l -c 'cd /Users/boris/projects/MyApp/ && rails runner "Resque.enqueue(Place)"'

基本上我需要做到以下几点:

  1. Load Ruby with RVM
  2. 导航到MyApp目录
  3. 运行以下行:rails runner "Resque.enqueue(Place)

上面的 cron 似乎正在运行,但它产生以下错误,rails runner 怎么回事?

/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

【问题讨论】:

    标签: ruby-on-rails unix cron runner


    【解决方案1】:

    实际上最好的方法是使用 rvm 包装器。你可以像这样创建一个包装器:

    rvm wrapper ruby-1.9.3-p0@somegemset appname rails 
    

    二进制文件可以是 rails、rake、gem 或您安装的任何其他 ruby​​ 二进制文件。发生的情况是 rvm 创建了一个包装器,该包装器将在执行 rails 命令之前获取正确的 rvm 环境。在系统范围的 rvm 上,包装器通常放在 /usr/local/rvm/bin/ 中

    现在你可以从 cron 做:

    */3 * * * * cd /path/to/your/app && appname_rails runner "Resque.enqueue(Place)" -e production
    

    这将 cd 进入您的应用程序目录并每 3 分钟执行一次您刚刚创建的 rvm 包装器。此示例基于 rails 3 和生产环境。

    【讨论】:

      【解决方案2】:

      在运行任何 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)"'
      

      【讨论】:

        【解决方案3】:

        这里有很多动人的部分,这里有一些关于在您的环境中检查的内容(ruby、rvm、bundle)的指示 - 发布您的发现,然后从那里开始。

        Path's issue with bundler, to change or not to change?

        Bundle bug

        我猜这些命令在 cron 之外运行良好?如果您以其他用户身份运行 cron 作业,请检查该用户的环境。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-25
          • 2014-04-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-28
          • 2016-01-29
          • 2015-10-29
          相关资源
          最近更新 更多