Для деплоя своих проектов на Rails я использую третью версию Capistrano. На серверах я использую rvm для установки ruby и на локалке использую следующий набор гемов:

Gemfile
1
2
3
4
  gem 'capistrano'
  gem 'capistrano-rails'
  gem 'capistrano-bundler'
  gem 'capistrano-rvm'

И тут два дня назад деплой ломается одновременно на обоих моих проектах. На попытке сделать assets:precompile вылетает такая ошибка:

1
2
3
4
5
6
7
8
DEBUG [6c391f27] Command: cd /var/www/apps/aliya/releases/20140108194955 && ( RAILS_ENV=production bundle exec rake assets:precompile )
DEBUG [6c391f27]  bash: bundle: command not found
cap aborted!
rake stdout: Nothing written
rake stderr: Nothing written

Tasks: TOP => deploy:assets:precompile
(See full trace by running task with --trace)

Я связал это с выходом новой версии ruby (2.1) и решил прописать в deploy.rb нужную версию:

deploy.rb
1
2
set :rvm_type, :user
set :rvm_ruby_version, '2.0.0-p353'

Но это не помогло. Тогда я прописал в тот же файл значение переменной $PATH. Для этого заходим по SSH на сервер, выполняем echo $PATH и прописываем его на локалке:

deploy.rb
1
2
3
set :default_env, {
    :PATH => '/home/deployer/.rvm/gems/ruby-2.0.0-p353/bin:/home/deployer/.rvm/gems/ruby-2.0.0-p353@global/bin:/home/deployer/.rvm/rubies/ruby-2.0.0-p353/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/deployer/.rvm/bin'
}

Бинго! Всё работает как раньше.

P.S. Самое интересное, что если прописать $PATH, но не указывать версию ruby, то все равно получаем ошибку, но уже раньше, на bundle install

1
2
3
4
5
6
7
cap aborted!
bundle stdout: Nothing written
bundle stderr: Nothing written

Tasks: TOP => deploy:updated => bundler:install
(See full trace by running task with --trace)
DEBUG [c90cd2c7]  /home/deployer/.rvm/scripts/set: line 19: exec: bundle: not found

Комментарии