Rails的cron时,bundle:命令未find

我试图每当执行一个耙子任务使用一天。 我得到这个错误

/bin/bash: bundle: command not found /home/app/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find bundler (>= 0) amongst [minitest-1.6.0, rake-0.8.7, rdoc-2.5.8] (Gem::LoadError) from /home/app/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:256:in `to_spec' from /home/app/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems.rb:1210:in `gem' from /home/app/.rvm/gems/ruby-1.9.2-p180/bin/bundle:18:in `<main>' 

这是我的crontab

 # Begin Whenever generated tasks for: /home/af/www/app/releases/20120216172204/config/schedule.rb PATH=/home/af/.rvm/gems/ruby-1.9.2-p180@global/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 0 0 * * * /bin/bash -l -c 'cd /home/af/www/app/releases/20120216172204 && rvm 1.9.1-p180; RAILS_ENV=production /home/af/.rvm/gems/ruby-1.9.2-p180/bin/bundle exec rake daily:stats --silent >> /home/af/www/app/releases/20120216172204/log/cron.log 2>&1' # End Whenever generated tasks for: /home/af/www/app/releases/20120216172204/config/schedule.rb 

我不知道为什么它不工作。 如果我运行命令:

 cd /home/af/www/app/releases/20120216172204 && rvm 1.9.1-p180; RAILS_ENV=production /home/af/.rvm/gems/ruby-1.9.2-p180/bin/bundle exec rake daily:stats --silent >> /home/af/www/app/releases/20120216172204/log/cron.log 2>&1 

它工作正常,不知道这是怎么回事。

您还可以通过在schedule.rb文件的顶部放置以下内容来确保PATH结束于crontab中:

 env :PATH, ENV['PATH'] 

https://groups.google.com/forum/#!msg/whenever-gem/yRLt3f2jrfU/Exu3xfCo8DAJ

如果上述解决scheme不适合您,请尝试:

 env :GEM_PATH, ENV['GEM_PATH'] 

经过这么多的尝试,以下似乎工作

从terminal键入以下内容

  1. inputcrontab -e这将打开crontab进行编辑。 你会看到如下两行:

     # cron clears out environment variables, but Rubber.root/script/rubber uses # "rvm do default" to run, so no longer any need to setup ruby env vars here, # all we need is PATH PATH=/<path to bundle>/bundle/ruby/1.9.1/bin:/usr/local/rvm/gems 

     # Begin Whenever generated tasks for: /mnt/wamjoke-production/releases/20120912$ PATH=/<path to bundle>/shared/bundle/ruby/1.9.1/bin:/usr/local/rvm/gems 
  2. 注释掉两个以PATH开头的行。

每当运行“bundle exec when”命令时,执行上述步骤。 它工作。

不知道为什么PATH会误导环境。

在我的情况下,我只是跑:

 rvm env --path -- ruby-version[@gemset-name] 

参考cron作业设置文档

crontab -e bundle命令之前,为ruby path的命令添加了新的源代码行

 source /usr/local/rvm/environments/ruby-1.9.3-p392; 

现在的命令如下所示:

之前:

 0 4 * * * cd /home/current && bundle exec rake my_rake RAILS_ENV=production 

后:

 0 4 * * * cd /home/current && source /usr/local/rvm/environments/ruby-1.9.3-p392; bundle exec rake my_rake RAILS_ENV=production 

干杯!!!

我讨厌这个问题 – 我花了几个小时试图解决这个问题。

什么对我有用就是补充

 RAILS_ENV=production; source /usr/local/rvm/scripts/rvm; 

捆绑命令之前。

我想你应该尝试在你的crontab中明确地设置GEM_HOME和GEM_PATH环境variables。 你也可以尝试通过cron运行像gem list --localgem environment ,并检查输出。

我整个下午都在玩这个游戏,找不到更好的解决scheme。 这是我想出来的

 bundle install --binstubs 

然后运行

 bin/rake daily:stats 

这是一个ENV ['PATH']没有设置的问题。 解决这个问题的最优雅的方法是在安装之后,将rvm相关的脚本附加到path中。 将以下行添加到.bashrc的开头(开始而不是结束,因为非交互式shell会访问.bashrc,行[ -z "$PS1" ] && return错误,并且后续行不会执行。

 PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" 

而不是试图明确设置PATH和环境variables。

忘记cron文件中的PATH设置。 设置PATH不起作用。

将path设置为在您的config / schedule.rb中显式捆绑

设置:bundle_command,“/ usr / local / bin / bundle”

您可以尝试下面的解决scheme,我发现Googlesearch时,最终为我工作….希望应该与你合作。

我在生产上实施和testing了相同的产品,确保相应地改变环境 –

 set :output, "{your path on the server}/log/cron_log.log" set :environment, :production env :PATH, ENV['PATH'] job_type :rbenv_rake, %q!eval "$(rbenv init -)"; cd :path && :environment_variable=:environment bundle exec rake :task --silent :output! 

祝你好运,这个问题发生在3年之后,因为我之前使用的是简单的生产文档。

我在0.9.4最新版本中使用了Ruby 2.x和Rails 4.2。 如果问题的性质是相同的,它也应该与早期版本一起工作。

谢谢。

对于现代修复,请在capistrano deploy.rb中添加此行,

 set :whenever_command, "bundle exec whenever" 

[root @ smbserver current]#crontab -e

 02 22 * * 1-5 /bin/bash -l -c /shell/day.sh 30 14 * * 0 /bin/bash -l -c /shell/week.sh