Сконфигурировал новый сервер и попытался загрузить туда с помощью 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' }
После этого всё сраслось и установилось.