Установка пакета не работает из capistrano
Я хочу развернуть мое простое приложение rails 4.0
через capistrano 3.0
.
Я использую bundler 1.3.5
, поэтому добавляю capistrano-bundler для интеграции пакета с capistrano.
У меня довольно простая конфигурация (почти по умолчанию):
set :bundle_gemfile, -> { release_path.join('Gemfile') }
set :bundle_dir, -> { shared_path.join('bundle') }
set :bundle_flags, ''
set :bundle_without, %w{test development}.join(' ')
set :bundle_binstubs, -> { shared_path.join('bin') }
set :bundle_roles, :all
Когда я запускаю cap staging deploy --trace
, он терпит неудачу:
[50b524bc] Running /usr/bin/env bundle --gemfile /home/webmaster/www/api/releases/20131014144650/Gemfile --path /home/webmaster/www/api/shared/bundle --binstubs /home/webmaster/www/api/shared/bin --without test development on 125.51.3.1
DEBUG [50b144bc] Command: cd /home/webmaster/www/api/releases/20131014144650 && /usr/bin/env bundle --gemfile /home/webmaster/www/api/releases/20131014144650/Gemfile --path /home/webmaster/www/api/shared/bundle --binstubs /home/webmaster/www/api/shared/bin --without test development
cap aborted!
bundle stdout: Nothing written
bundle stderr: Nothing written
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.0.0/lib/sshkit/command.rb:94:in `exit_status='
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.0.0/lib/sshkit/backends/netssh.rb:125:in `block (4 levels) in _execute'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.7.0/lib/net/ssh/connection/channel.rb:551:in `call'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.7.0/lib/net/ssh/connection/channel.rb:551:in `do_request'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:561:in `channel_request'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:465:in `dispatch_incoming_packets'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:221:in `preprocess'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:205:in `process'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:169:in `block in loop'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:169:in `loop'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:169:in `loop'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.7.0/lib/net/ssh/connection/channel.rb:269:in `wait'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.0.0/lib/sshkit/backends/netssh.rb:147:in `block (2 levels) in _execute'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.7.0/lib/net/ssh/connection/channel.rb:514:in `call'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.7.0/lib/net/ssh/connection/channel.rb:514:in `do_open_confirmation'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:545:in `channel_open_confirmation'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:465:in `dispatch_incoming_packets'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:221:in `preprocess'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:205:in `process'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:169:in `block in loop'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:169:in `loop'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:169:in `loop'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.0.0/lib/sshkit/backends/netssh.rb:149:in `block in _execute'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.0.0/lib/sshkit/backends/netssh.rb:106:in `tap'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.0.0/lib/sshkit/backends/netssh.rb:106:in `_execute'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.0.0/lib/sshkit/backends/netssh.rb:54:in `execute'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/capistrano-bundler-1.0.0/lib/capistrano/tasks/bundler.cap:20:in `block (4 levels) in <top (required)>'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.0.0/lib/sshkit/backends/abstract.rb:81:in `within'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/capistrano-bundler-1.0.0/lib/capistrano/tasks/bundler.cap:19:in `block (3 levels) in <top (required)>'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.0.0/lib/sshkit/backends/netssh.rb:42:in `instance_exec'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.0.0/lib/sshkit/backends/netssh.rb:42:in `run'
/home/omnomnom/.rvm/gems/ruby-2.0.0-p247/gems/sshkit-1.0.0/lib/sshkit/runners/parallel.rb:12:in `block (2 levels) in execute'
Tasks: TOP => deploy:updated => bundler:install
Но если я скопирую эту команду и запустил, хотя ssh все работает нормально (все камни установлены успешно) Как я могу ее исправить/отладить?
Ответы
Ответ 1
Просто столкнулся с той же проблемой. Для меня это было так:
1) Установка драгоценного камня capistrano-rvm
и добавление
require 'capistrano/rvm'
в Capfile
.
2) Добавление моего пользователя развертывания в группу rvm
на сервере:
# usermod deploy -a -G rvm
3) Создание двух каталогов в домашней папке пользователя развертывания: .rvm
и .rvm/bin
4) Добавив эту строку в мой файл deploy.rb
:
set :default_env, { rvm_bin_path: '~/.rvm/bin' }
Уф! Это заняло несколько часов.
Ответ 2
Ошибка звучит так, как будто она не может найти bundle
в вашем PATH
. Возможно, когда вы используете SSH вручную, он запускает что-то в вашем ~/.profile
или ~/.bash_profile
, который добавляет его к вашему пути.
Найдите путь к bundle
, выполнив вход и запустив which bundle
. Затем попробуйте найти способ добавления этого пути в переменную среды PATH
. Если есть что-то в вашем ~/.bash_profile, try moving it to
~/.bashrc`.
Вы также можете попробовать Сопоставление команд, чтобы указать точный путь.
Дополнительные советы по устранению неполадок можно найти в http://www.capistranorb.com/documentation/faq/why-does-something-work-in-my-ssh-session-but-not-in-capistrano/
Ответ 3
В моем случае я изменил config/deploy.rb set :log_level, :info
на set :log_level, :debug
, который показал мне "Не могу найти GEMFILE". Это означало, что bundle
работает с неправильным рабочим каталогом, поэтому я изменил
before "deploy:assets:precompile", "deploy:bundle_install"
desc "Bundle install for RVMs sake"
task :bundle_install do
on roles(:app) do
execute "/u0/jrepenni/.rvm/bin/rvm [email protected] do /u0/jrepenni/.rvm/gems/[email protected]/bin/bundle install"
end
end
к
before "deploy:assets:precompile", "deploy:bundle_install"
desc "Bundle install for RVMs sake"
task :bundle_install do
on roles(:app) do
execute "cd #{release_path} && /u0/jrepenni/.rvm/bin/rvm [email protected] do /u0/jrepenni/.rvm/gems/[email protected]/bin/bundle install"
end
end
(обратите внимание на добавленный "cd" )
Ответ 4
У меня было:
set :bundle_flags, '--system --quiet'
Изменено на:
set :bundle_flags, '--deployment --quiet'
Это разрешило проблему.
Ответ 5
Простое решение и работа со всеми версиями Capistrano 3:
gem 'rvm1-capistrano3', require: false
В Capfile добавьте
require 'rvm1/capistrano3'
https://github.com/rvm/rvm1-capistrano3
Ответ 6
Это работает в capistrano 3:
task :bundle_list do
on roles(:app) do
within release_path do
with rails_env: fetch(:rails_env) do
execute :bundle, "list"
end
end
end
end
Используйте это для задачи рейка:
execute :rake, 'some_rake_task'
Ответ 7
в файле config/deploy/production.rb поместите
set :rvm_ruby_version, '2.0.0-p247'
см. https://github.com/capistrano/rvm
Ответ 8
Чтобы отладить его, попробуйте удалить флаг --quiet
:
set :bundle_flags, '--deployment'
Используете ли вы rbenv, rvm или что-то подобное? Возможно, при запуске bundle
версия Ruby еще не установлена. Удалив флаг --quite
, вы можете получить отладочную информацию.