【问题标题】:Error in bundle when executing cron.job with Whenever使用 When 执行 cron.job 时出现捆绑错误
【发布时间】:2013-10-13 23:35:59
【问题描述】:

我有以下schedule.rb

every 1.minute do
  runner "User.persist_things"
end

但是查看我的log/cron.log 文件,输出如下:

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- bundler/setup (LoadError)
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require'
    from /Users/felipeclopes/projects/example/config/boot.rb:6
    from script/rails:5:in `require'
    from script/rails:5

我正在使用带有 ruby​​ 的 RVM,当前版本是:

$ ruby --version
ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin10.8.0]

看来 cron 作业正在加载不正确的 ruby​​ 版本,但我不知道如何解决这个问题。你能帮我弄清楚吗?

【问题讨论】:

  • 只做 gem install bundler,然后再试一次
  • 我这样做了,但没有成功!
  • 您可以在User 模型中发布您的方法吗?使用 runner 时,请确保将方法定义为 self.persist_things
  • 它是一个类方法。问题可能与正在加载的错误 ruby​​ 版本或类似的东西有关。这是环境问题。
  • 你能从 Rails 控制台或通过 rake 任务成功调用 User.persist_things,在 When 上下文之外吗?

标签: ruby-on-rails ruby cron whenever


【解决方案1】:

when 和 rvm 集成存在一个已知问题。我建议您按照宝石页面上的说明进行操作: RVM Integration

另见:Whenever issues related to rvm

【讨论】:

  • rvmrc 文件已弃用,我正在使用 .ruby-version 和 .gemset-version,但它不起作用。
  • 嗯,在这一点上,我建议卸载所有版本的 Ruby,卸载所有 gemset,然后从头开始。在我看来,无论何时/cron 都不尊重 .ruby-version 和 .gemset-version,而是使用默认的 ruby​​/gemset。
【解决方案2】:

你可以放弃 RVENV 切换到更干净的东西,比如 rbenv + rbenv-binstubs

【讨论】:

    【解决方案3】:

    如果是这种情况,您应该在 config/deploy.rb 中使用它,以便在使用 capistrano 时制作:

    require 'whenever/capistrano'
    ...
    set :whenever_command, 'bundle exec whenever'
    

    【讨论】:

      猜你喜欢
      • 2018-04-09
      • 1970-01-01
      • 2013-06-16
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 2013-08-23
      • 2014-06-08
      • 2017-07-11
      相关资源
      最近更新 更多