2013-10-14 4 views
30

Я хочу развернуть мое простое приложение rails 4.0 через capistrano 3.0.комплект комплект не работает от capistrano

Я использую 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 все отлично работает (все камни установлены успешно) Как я могу исправить/отладить его?

+0

У Rubygems проблемы сегодня. Повторите попытку позже ... – spickermann

+1

@spickermann, но gems download хорошо работает, если я запускаю эту команду через ssh ... – freemanoid

+0

Опубликуйте свой capfile и deploy.rb, возможно, возникла проблема с настройкой. Кроме того, убедитесь, что пользователь вашего развертывания имеет права на запись в каталог gem. – CoolTapes

ответ

50

Просто столкнулся с тем же вопросом. То, что сработало для меня это:

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' } 

Фу! Это заняло несколько часов.

+0

Вы нашли корень проблемы? – freemanoid

+0

На самом деле не было (было нажато на время, и он должен был запустить его). Я подозреваю, что это связано с тем, что настройки rvm не загружаются при входе в систему Capistrano (в отличие от обычного входа в систему, см. [Здесь] (http://www.capistranorb.com/documentation/faq/why-does-something -работа-в-мое-SSH-сессии, но-не-в-Capistrano /)). Я начал изучать его, но потом решил пойти по пути с обертками rvm, и это сработало. –

+0

это работало для меня, только одна коррекция: мне пришлось сменить на изменение, требуя «capistrano/rvm», чтобы требовать «rvm/capistrano», и все отлично работало –

-1

Для отладки это попытаться удалить --quiet флаг:

set :bundle_flags, '--deployment'

Вы используете rbenv, RVM или что-то подобное? Возможно, при запуске bundle версия Ruby еще не установлена. Удалив флаг --quite, вы можете получить отладочную информацию.

+0

Как вы можете видеть, в команде нет флага '' '--quiet''', потому что я уже удалил его. Я использую rvm, как я могу отлаживать, если ruby ​​уже настроен? – freemanoid

12

Ошибка в том, что она не может найти bundle в вашем PATH. Возможно, когда вы используете SSH вручную, он запускает что-то в вашем ~/.profile или ~/.bash_profile, который добавляет его на ваш путь.

Поиск по пути bundle, вход в систему и эксплуатация. which bundle. Затем попробуйте найти способ добавления этого пути в переменную среды PATH. Если в вашем ~/.bash_profile, try moving it to ~/.bashrc` есть что-то.

Вы также можете попробовать Command Mapping, чтобы уточнить путь.

Есть еще некоторые советы по устранению неполадок в http://www.capistranorb.com/documentation/faq/why-does-something-work-in-my-ssh-session-but-not-in-capistrano/

2

В моем случае, я изменил конфиг/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 

(обратите внимание на дополнительные "компакт-диск")

0

Это работает в 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 

Используйте это для rak е задача:

execute :rake, 'some_rake_task' 
1

Я имел:

set :bundle_flags, '--system --quiet' 

Изменен:

set :bundle_flags, '--deployment --quiet' 

Это разрешило проблему.

Смежные вопросы