Rails cron всякий раз, когда bundle: команда не найдена - PullRequest
45 голосов
/ 28 февраля 2012

Я пытаюсь использовать всякий раз, когда выполняю грабли один раз в день. Я получаю эту ошибку

/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

Работает нормально, не уверен, что здесь происходит.

Ответы [ 12 ]

59 голосов
/ 16 июня 2012

Вы также можете убедиться, что ваш PATH окажется в crontab, поместив следующее в начало файла schedule.rb:

env :PATH, ENV['PATH']

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

Если вышеуказанное решение не работает для вас, попробуйте:

env :GEM_PATH, ENV['GEM_PATH']
4 голосов
/ 22 октября 2015

В моем случае я просто запустил:

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

Ссылаясь на cron job setup doc

Добавил новую строку исходного кода в команду для пути ruby ​​перед командой bundleв crontab -e

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

Ура !!!

4 голосов
/ 12 сентября 2012

После стольких попыток, кажется, работает следующее

Введите следующее с терминала

  1. Введите crontab -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
    

    AND

    # 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 всякий раз».И это работает.

Не знаю, почему PATH вводит в заблуждение окружающую среду.

3 голосов
/ 28 февраля 2012

Я ненавижу эту проблему - я тоже часами пытался ее решить.

Что мне подходит, так это добавление

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

перед командой bundle.

1 голос
/ 15 января 2018

Выполнив команду таким образом: /bin/bash -l -c

Вы запускаете команду bash в качестве оболочки входа в систему, которая собирается получить (выполнить) /etc/profile файл bash в качестве установочного файла. Таким образом, если вы проверите этот файл, он может иметь командные строки bash, которые стирают ваш предыдущий $PATH, который вам не нужен, поскольку он содержит ваш путь к вашему пакету и все остальные ваши команды в первую очередь.

Чтобы устранить эту проблему, вам просто нужно удалить строки, связанные с настройкой переменной $PATH в вашем файле /etc/profile.

1 голос
/ 28 декабря 2014

Забудьте о настройках PATH в файлах cron. Настройка PATH не работает.

Установите путь для явного связывания в вашем config / schedule.rb

set: bundle_command, "/ usr / local / bin / bundle"

1 голос
/ 28 февраля 2012

Я думаю, вам следует явно установить переменные окружения GEM_HOME и GEM_PATH в вашем crontab.Вы также можете попробовать запустить что-то вроде gem list --local или gem environment через cron и проверить вывод.

0 голосов
/ 16 марта 2016

Вы можете попробовать следующее решение, которое я нашел во время поиска в Google, и которое, наконец, работает для меня .... надеюсь, что это сработает с вами.

Я реализовал и протестировал то же самое на производстве, чтобы убедиться, что изменить средусоответственно -

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 года, так как я использовал прежде, чем просто то, что указано в документации по гемам на производстве.

Я использую Ruby 2.xи Rails 4.2 с последней версией 0.9.4.Он должен работать и с более ранней версией, если характер проблемы такой же.

спасибо.

0 голосов
/ 08 августа 2013

Для современного исправления добавьте эту строку в capistrano deploy.rb,

set :whenever_command, "bundle exec whenever"
0 голосов
/ 25 июля 2013

Это не заданная проблема ENV ['PATH']. Самый элегантный способ исправить это - добавить сценарии, связанные с rvm, к пути сразу после установки. Добавьте следующие строки в начало .bashrc (начало и не конец, как при обращении к .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 и sully.

...