sh: 1: bundle: not found

Сконфигурировал новый сервер и попытался загрузить туда с помощью Capistrano одно приложение.
При команде

cap deploy

появляется сообщение типа:

cap deploy
    triggering load callbacks
  * 2013-06-09 13:39:12 executing `vagrant'
    triggering start callbacks for `deploy'
  * 2013-06-09 13:39:12 executing `multistage:ensure'
  * 2013-06-09 13:39:12 executing `deploy'
  * 2013-06-09 13:39:12 executing `deploy:update'
 ** transaction: start
  * 2013-06-09 13:39:12 executing `deploy:update_code'
  * getting (via checkout) revision  to /var/folders/p3/p3hfWEqQH3W8MCQPS4J5tU+++TM/-Tmp-/20130609113912
    executing locally: cp -R . /var/folders/p3/p3hfWEqQH3W8MCQPS4J5tU+++TM/-Tmp-/20130609113912
    command finished in 167ms
  * Compressing /var/folders/p3/p3hfWEqQH3W8MCQPS4J5tU+++TM/-Tmp-/20130609113912 to /var/folders/p3/p3hfWEqQH3W8MCQPS4J5tU+++TM/-Tmp-/20130609113912.tar.gz
    executing locally: tar czf 20130609113912.tar.gz 20130609113912
    command finished in 409ms
    servers: ["10.33.33.33"]
 ** sftp upload /var/folders/p3/p3hfWEqQH3W8MCQPS4J5tU+++TM/-Tmp-/20130609113912.tar.gz -> /tmp/20130609113912.tar.gz
    [10.33.33.33] /tmp/20130609113912.tar.gz
    [10.33.33.33] done
  * sftp upload complete
  * executing "cd /var/www/worktime/releases && tar xzf /tmp/20130609113912.tar.gz && rm /tmp/20130609113912.tar.gz"
    servers: ["10.33.33.33"]
    [10.33.33.33] executing command
    command finished in 174ms
  * 2013-06-09 13:39:14 executing `deploy:finalize_update'
    triggering before callbacks for `deploy:finalize_update'
  * 2013-06-09 13:39:14 executing `bundle:install'
  * executing "cd /var/www/worktime/releases/20130609113912 && bundle install --gemfile /var/www/worktime/releases/20130609113912/Gemfile --path /var/www/worktime/shared/bundle --deployment --quiet --without development test event_machine doc"
    servers: ["10.33.33.33"]
    [10.33.33.33] executing command
*** [err :: 10.33.33.33] sh: 1: bundle: not found
    command finished in 63ms

Очевидно Capistrano загружает минимальную среду (environment), в сравнении со средой для этого же пользователя при входе на сервер через ssh.

Для того, чтобы убедиться в этом, встроил в config/deploy.rb следующие строки, спертые из этой статьи:

desc "Echo environment vars"
namespace :env do
  task :echo do
    run "echo printing out cap info on remote server"
    run "echo $PATH"
    run "printenv"
  end
end

И запустил с терминала

cap env:echo

, что подтвердило мои догадки:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Здесь явно не хватает путей к RUBY и GEM_PATH

Я добавил их в config/deploy.rb:

set :default_environment, {
  'PATH' => "/usr/local/rvm/gems/ruby-1.9.3-p385-falcon/bin:/usr/local/rvm/gems/ruby-1.9.3-p385-falcon@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p385-falcon/bin:/usr/local/rvm/bin:$PATH",
  'GEM_PATH' => '/usr/local/rvm/gems/ruby-1.9.3-p385-falcon:/usr/local/rvm/gems/ruby-1.9.3-p385-falcon@global'
}

После этого всё сраслось и установилось.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *