Всякий раз, когда гем не выполняет задачу

Я настроил проект rails для использования драгоценного камня Whenever. Теперь я развертываю свой проект с помощью Capistrano, и задачи хорошо добавляются в список crontab. Но когда я вижу только одну строку:

/bin/bash: bundle: command not found

Итак, я прочитал пару статей в Интернете, поэтому я добавил это поверх моего файла schedule.rb.

env 'PATH', ENV['PATH']

Таким образом, вы должны думать, что проблема решена, потому что это добавит следующую строку в crontab:

PATH=/var/rails/alfa_paints/shared/bundle/ruby/1.9.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Таким образом, вы должны думать, что пакет находится в пути, когда команда выполняется. Но все равно не повезло. Я выполнил команду и развертывание с отдельным пользователем. Итак, чтобы убедиться, что все работает с этим пользователем, в данном случае это deployer. Я взял на себя роль развертывателя и выполнил команду, указанную в crontab. У меня не возникло никаких проблем при выполнении этой команды.

У меня заканчиваются варианты, и мне было интересно, сталкивался ли кто-нибудь еще с таким странным поведением? Я надеюсь на какой-нибудь совет. Это вывод в моем crontab:

# Begin Whenever generated tasks for: alfa_paints
 PATH=/var/rails/alfa_paints/shared/bundle/ruby/1.9.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

0 1 * * * /bin/bash -l -c 'cd /var/rails/alfa_paints/releases/20130127192223 && RAILS_ENV=production bundle exec rake alfa:cleanup --silent >> /var/rails/alfa_paints/shared/log/whenever.log 2>&1'

# End Whenever generated tasks for: alfa_paints

Приветствуется любая помощь!


person Niels    schedule 28.01.2013    source источник
comment
Действительно ли команда bundle установлена ​​в вашей системе в одном из каталогов, перечисленных в вашей переменной PATH? Каков результат which bundle?   -  person Stuart M    schedule 10.02.2013
comment
да, which bindle возвращает: /usr/local/bin/bundle. Если вы посмотрите на ПУТЬ, указанный выше, вы увидите включенный /usr/local/bin. И когда я запускаю команду exec пакета, она работает на этой машине.   -  person Niels    schedule 16.02.2013
comment
Вы работаете каждый раз под тем же пользователем, с которым развернуто ваше приложение Rails?   -  person Dan    schedule 22.02.2013
comment
@Niels, у меня такая же проблема, приятель. Пока нет решения, но вы не одиноки.   -  person vvohra87    schedule 16.11.2013
comment
Бьюсь об заклад, @rubious_dan прав, ваше приложение развернуто с другим пользователем, чем когда бы вы ни использовали/вы тестируете.   -  person Mike Szyndel    schedule 29.12.2013
comment
@MichaelSzyndel Я испытываю то же самое. Как сделать их одинаковыми?   -  person index    schedule 07.01.2014
comment
@index внимательно прочитайте документы capistrano/rvm, на это также следует ответить на SO уже   -  person Mike Szyndel    schedule 07.01.2014
comment
Ваш cron не работает или команда, которую вы хотите выполнить через cron, не работает? Попробуйте запустить этот cd /var/rails/alfa_paints/releases/20130127192223 && RAILS_ENV=production bundle exec rake alfa:cleanup --silent ›› /var/rails/alfa_paints/shared/log/whenever.log 2›&1 прямо на терминале . Если он работает, значит, cron не работает. Иногда существует разница часовых поясов между локальным и серверным временем. Проверьте и это.   -  person mandar.gokhale    schedule 20.01.2014


Ответы (2)


Вам нужно будет передать необходимые переменные среды в crontab.

Добавьте эти строки вверху вашего crontab (crontab -e)

(очевидно, вы измените значения переменных, чтобы они представляли значения в вашей среде)

(в данном случае я использую RVM)

PATH=/home/deploy/.rvm/gems/ruby-2.0.0-p247/bin:/home/deploy/.rvm/gems/ruby-2.0.0p247@global/bin:/home/deploy/.rvm/ rubies/ruby-2.0.0p247/bin:/home/deploy/.rvm/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/ bin/:/home/deploy/.rvm/bin

GEM_HOME=/home/deploy/.rvm/gems/ruby-2.0.0-p247

GEM_PATH=/home/deploy/.rvm/gems/ruby-2.0.0-p247/home/deploy/.rvm/gems/ruby-2.0.0-p247@global

MY_RUBY_HOME=/home/deploy/.rvm/rubies/ruby-2.0.0-p247

person lsaffie    schedule 22.02.2014
comment
Следующая ссылка stackoverflow.com/a/11057577/936494 предлагает тот же ответ с использованием ярлыков. - person Jignesh Gohel; 08.10.2014

Какую оболочку вы используете? Так как я видел всякий раз, когда добавляет «bash -l -c» в команду задания. Любой набор

установить :job_template, ноль

или если вы используете zsh, то

установить :job_template, "zsh -l -c ':job'"

Это решило мою проблему

person Rahul Chaudhari    schedule 03.04.2014