web-dev-qa-db-fra.com

l'installation groupée ne fonctionne pas à partir de capistrano

Je souhaite déployer mon application Rails 4.0 simple via capistrano 3.0

J'utilise bundler 1.3.5 donc j'ajoute capistrano-bundler gem pour intégrer bundler à capistrano.

J'ai une configuration assez simple (presque par défaut):

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

Lorsque j'exécute le cap staging deploy --trace, il échoue:

[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

Mais si je copie cette commande et que j’exécute bien que ssh fonctionne correctement (toutes les pierres précieuses sont installées avec succès). Comment puis-je résoudre ce problème?

31
freemanoid

Je viens de rencontrer le même problème. Ce qui a fonctionné pour moi a été ceci:

1) Installer la gemme capistrano-rvm et ajouter

require 'capistrano/rvm'

à la Capfile.

2) Ajout de mon utilisateur de déploiement au groupe rvm sur le serveur:

# usermod deploy -a -G rvm

3) Création de deux répertoires dans le dossier de base de mon utilisateur de déploiement: .rvm et .rvm/bin

4) Ajout de cette ligne à mon fichier deploy.rb:

set :default_env, { rvm_bin_path: '~/.rvm/bin' }

Phew! Cela a pris quelques heures.

50
Daibhi O Domhnaill

L'erreur semble ne pas pouvoir trouver bundle dans votre PATH. Il est possible que lorsque vous entrez manuellement dans SSH, il exécute quelque chose dans votre ~/.profile ou ~/.bash_profile qui l'ajoute à votre chemin.

Recherchez le chemin d'accès à bundle en vous connectant et en exécutant which bundle. Ensuite, essayez de trouver comment ce chemin est ajouté à votre variable d’environnement PATH. S'il y a quelque chose dans votre ~/.bash_profile, try moving it to ~/.bashrc` à la place.

Vous pouvez également essayer Command Mapping pour spécifier un chemin exact.

Il existe d'autres astuces de dépannage à l'adresse http://www.capistranorb.com/documentation/faq/why-does-something-work-in-my-ssh-session-but-not-in-capistrano/ . _

12
Tim Moore

Solution simple et compatible avec toutes les versions de Capistrano 3:

gem 'rvm1-capistrano3', require: false

Dans Capfile ajouter

require 'rvm1/capistrano3'

https://github.com/rvm/rvm1-capistrano3

3
Nesha Zoric

Dans mon cas, j'ai changé le set :log_level, :info de config/deploy.rb en set :log_level, :debug, ce qui m'a montré "Je ne trouve pas GEMFILE". Ceci suggérait que bundle fonctionnait avec le mauvais répertoire de travail, alors j’ai changé

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 2.1.0@akiary do /u0/jrepenni/.rvm/gems/Ruby-2.1.0@global/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 2.1.0@akiary do /u0/jrepenni/.rvm/gems/Ruby-2.1.0@global/bin/bundle install"
  end
end

(notez le "cd" ajouté)

2
jackr

J'ai eu:

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

Changé en:

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

Cela a résolu un problème.

1
Alex Fedoseev
gem install bundler 

c’est ce que j’avais besoin d’exécuter sur mon utilisateur de déploiement pour Capistrano

/usr/local/rvm/bin/rvm 2.4.0 do bundle install --path /var/www/hivebench-api/shared/bundle --without development test --deployment --quiet

passer! 

0
Stéphane Bruckert

dans votre fichier config/deploy/production.rb

set :rvm_Ruby_version, '2.0.0-p247'  

voir https://github.com/capistrano/rvm

0
user1130176

Cela fonctionne à 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

Utilisez ceci pour la tâche de rake:

execute :rake, 'some_rake_task'
0
Alain Beauvois