Ответ 1
Я играл с этим весь день и не мог найти лучшего решения. Вот что я придумал
bundle install --binstubs
а затем запустите
bin/rake daily:stats
Я пытаюсь использовать каждый раз, чтобы выполнить команду 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
Он отлично работает, не уверен, что происходит здесь.
Я играл с этим весь день и не мог найти лучшего решения. Вот что я придумал
bundle install --binstubs
а затем запустите
bin/rake daily:stats
Вы также можете убедиться, что ваш PATH заканчивается в crontab, поставив следующее вверху файла schedule.rb:
env :PATH, ENV['PATH']
https://groups.google.com/forum/#!msg/whenever-gem/yRLt3f2jrfU/Exu3xfCo8DAJ
Если вышеприведенное решение не работает для вас, попробуйте:
env :GEM_PATH, ENV['GEM_PATH']
После стольких попыток выхода, кажется, что работает
Введите следующее из терминала
Тип 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 вводит в заблуждение окружающую среду.
В моем случае я просто побежал:
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
Ура!!!
Я ненавижу эту проблему - я потратил часы, пытаясь ее решить.
Что для меня работает, так это добавить
RAILS_ENV=production; source /usr/local/rvm/scripts/rvm;
перед командой bundle.
Я думаю, вам следует попробовать явно установить переменные среды GEM_HOME и GEM_PATH в вашем crontab. Вы также можете попробовать запустить что-то вроде gem list --local
или gem environment
через cron и проверить вывод.
Это проблема с установкой 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.
Забудьте о настройках PATH в файлах cron. Установка PATH не работает.
Задайте путь к явным образом в вашем config/schedule.rb
set: bundle_command, "/usr/local/bin/bundle"
Вы можете попробовать ниже решение, которое я нашел во время поиска в Интернете, и это работает для меня, наконец... надеюсь, что вы должны работать с вами.
Я реализовал и протестировал то же самое на производстве, чтобы изменить среду соответственно -
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. Он должен работать и с более ранней версией, если характер проблемы такой же.
спасибо.
Для современного исправления добавьте эту строку в 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