分享 whenever 在服务器上执行不了,出错 bin/rails:7: undefined method `require_relative' for main:Object (NoMethodError)

stephen · 2014年10月21日 · 最后由 psvr 回复于 2016年02月18日 · 3090 次阅读

whenever 在服务器上执行不了,error.log 显示出错 bin/rails:7: undefined method `require_relative' for main:Object (NoMethodError)

schedule.rb

set :output, { :error => 'error.log', :standard => 'cron.log' }

every :day, :at => '12:00am' do
  runner "Account.init_today"
end

every 1.minute do
  command "which ruby"
end

crontab -l

# Begin Whenever generated tasks for: dongqilai
0 0 * * * /bin/bash -l -c 'cd /home/ubuntu/www/dongqilai/releases/20141020092136 && bin/rails runner -e production '\''Account.init_today'\'' >> cron.log 2>> error.log'

* * * * * /bin/bash -l -c 'which ruby >> cron.log 2>> error.log'

Ruby 版本太低,没有 require_relative 功能

@huacnlee 应该不是吧,我的是 2.1.2

rbenv version
2.1.2 (set by /home/ubuntu/.rbenv/version)

crontab 里面执行的 Ruby 和你直接在 shell 里面调用的 Ruby 是不同的

请参考下面这些帖子:

https://ruby-china.org/topics/9690 https://ruby-china.org/topics/3765

最近也在用 whenever,学习一下。

我的方式

job_type :rbenv_runner, %Q{ export PATH=$HOME/.rbenv/shims:$HOME/.rbenv/bin:/usr/bin:$PATH; eval "$(rbenv init -)"; \
                         cd :path && bin/rails runner -e :environment ':task' :output }

every :day, :at => '12:00am' do
  rbenv_runner "Account.init_today"
end

楼主是因为调错了 ruby 的版本,楼主的系统里肯定装了不止一个 ruby,老的 ruby 里不支持 require_relative。尝试把 PATH 调整一下

需要 登录 后方可回复, 如果你还没有账号请 注册新账号