Подтвердить что ты не робот

Rails cron всякий раз, когда команда bundle: command не найдена

Я пытаюсь использовать каждый раз, чтобы выполнить команду rake onces в день. Im получение этой ошибки

/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/[email protected]/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

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

4b9b3361

Ответ 1

Я играл с этим весь день и не мог найти лучшего решения. Вот что я придумал

bundle install --binstubs

а затем запустите

bin/rake daily:stats

Ответ 2

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

env :PATH, ENV['PATH']

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

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

env :GEM_PATH, ENV['GEM_PATH']

Ответ 3

После стольких попыток выхода, кажется, что работает

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

  • Тип 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
    

    и

    # 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
    
  • Прокомментируйте обе строки, начинающиеся с PATH.

Выполняйте вышеуказанный шаг при каждом запуске команды "bundle exec when". И это работает.

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

Ответ 4

В моем случае я просто побежал:

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

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

Добавлена ​​новая строка источника для команды для маршрута ruby перед командой пучка в 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

Ура!!!

Ответ 5

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

Что для меня работает, так это добавить

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

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

Ответ 6

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

Ответ 7

Это проблема с установкой 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.

Ответ 8

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

Задайте путь к явным образом в вашем config/schedule.rb

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

Ответ 9

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

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

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. Он должен работать и с более ранней версией, если характер проблемы такой же.

спасибо.

Ответ 10

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

set :whenever_command, "bundle exec whenever"

Ответ 11

[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