2013-10-17 4 views
7

Ich versuche, meine Rails-App mit Capistrano 3.0 in eine EC2-Instanz zu implementieren. Ich staple jetzt mit der folgenden Ausgabe, die erscheint, wenn "cap production deploy" oder "cap production bundler: install" ausgeführt wird.Capistrano Bündler: Installation schlägt fehl

DEBUG [5b379979] Running /usr/bin/env if test ! -d /var/www/app/current; then echo "Directory does not exist '/var/www/app/current'" 1>&2; false; fi on ec2-75-101-200-185.compute-1.amazonaws.com 
DEBUG [5b379979] Command: if test ! -d /var/www/app/current; then echo "Directory does not exist '/var/www/app/current'" 1>&2; false; fi 
DEBUG [5b379979] Finished in 2.285 seconds command successful. 
INFO [f15c9f08] Running /usr/bin/env bundle --gemfile /var/www/app/current/Gemfile --path /var/www/app/shared/bundle --deployment --verbose --binstubs /var/www/billtune/shared/bin --without development test on ec2-75-101-200-185.compute-1.amazonaws.com 
DEBUG [f15c9f08] Command: cd /var/www/app/current && /usr/bin/env bundle --gemfile /var/www/app/current/Gemfile --path /var/www/app/shared/bundle --deployment --verbose --binstubs /var/www/app/shared/bin --without development test 
DEBUG [f15c9f08] /usr/bin/env: 
DEBUG [f15c9f08] bundle 
DEBUG [f15c9f08] : No such file or directory 
DEBUG [f15c9f08]  
cap aborted! 
bundle stdout: Nothing written 
bundle stderr: Nothing written 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/sshkit-1.0.0/lib/sshkit/command.rb:94:in `exit_status=' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/sshkit-1.0.0/lib/sshkit/backends/netssh.rb:125:in `block (4 levels) in _execute' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/net-ssh-2.7.0/lib/net/ssh/connection/channel.rb:551:in `call' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/net-ssh-2.7.0/lib/net/ssh/connection/channel.rb:551:in `do_request' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:561:in `channel_request' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:465:in `dispatch_incoming_packets' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:221:in `preprocess' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:205:in `process' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:169:in `block in loop' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:169:in `loop' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:169:in `loop' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/net-ssh-2.7.0/lib/net/ssh/connection/channel.rb:269:in `wait' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/sshkit-1.0.0/lib/sshkit/backends/netssh.rb:147:in `block (2 levels) in _execute' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/net-ssh-2.7.0/lib/net/ssh/connection/channel.rb:514:in `call' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/net-ssh-2.7.0/lib/net/ssh/connection/channel.rb:514:in `do_open_confirmation' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:545:in `channel_open_confirmation' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:465:in `dispatch_incoming_packets' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:221:in `preprocess' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:205:in `process' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:169:in `block in loop' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:169:in `loop' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/net-ssh-2.7.0/lib/net/ssh/connection/session.rb:169:in `loop' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/sshkit-1.0.0/lib/sshkit/backends/netssh.rb:149:in `block in _execute' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/sshkit-1.0.0/lib/sshkit/backends/netssh.rb:106:in `tap' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/sshkit-1.0.0/lib/sshkit/backends/netssh.rb:106:in `_execute' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/sshkit-1.0.0/lib/sshkit/backends/netssh.rb:54:in `execute' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/capistrano-bundler-1.0.0/lib/capistrano/tasks/bundler.cap:20:in `block (4 levels) in <top (required)>' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/sshkit-1.0.0/lib/sshkit/backends/abstract.rb:81:in `within' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/capistrano-bundler-1.0.0/lib/capistrano/tasks/bundler.cap:19:in `block (3 levels) in <top (required)>' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/sshkit-1.0.0/lib/sshkit/backends/netssh.rb:42:in `instance_exec' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/sshkit-1.0.0/lib/sshkit/backends/netssh.rb:42:in `run' 
/Users/shaimo-mbp/.rvm/gems/ruby-1.9.3-p448/gems/sshkit-1.0.0/lib/sshkit/runners/parallel.rb:12:in `block (2 levels) in execute' 
Tasks: TOP => bundler:install 

Wenn ssh-ing in den Server und läuft den gleichen Befehl ("cd/var/www/app/Strom & &/usr/bin/env Bündel --gemfile/var/www/app/Strom/Gemfile --path/var/www/app/gemeinsam/bundle - deployment - verbose - binstubs/var/www/app/shared/bin - ohne entwicklung test ") scheint alles in ordnung zu sein ...

Immer ziemlich verzweifelt über diese ... Danke!

Antwort

4

Die Linien

DEBUG [f15c9f08] Command: cd /var/www/app/current && /usr/bin/env bundle --gemfile /var/www/app/current/Gemfile --path /var/www/app/shared/bundle --deployment --verbose --binstubs /var/www/app/shared/bin --without development test 
DEBUG [f15c9f08] /usr/bin/env: 
DEBUG [f15c9f08] bundle 
DEBUG [f15c9f08] : No such file or directory 
DEBUG [f15c9f08]  

angeben, dass Bündler nicht gefunden wird oder nicht installiert ist. Capistrano (wie hier dokumentiert http://www.capistranorb.com/documentation/faq/why-does-something-work-in-my-ssh-session-but-not-in-capistrano/) läuft in einem non-Login, nicht interaktive Shell.

Ich würde vermuten, dass Bundler in einem speziellen Pfad installiert ist, oder dass Sie rvm, chruby oder rbenv verwenden. Und dass diese Dinge nicht initialisiert werden, wie sie sind, wenn Sie SSH in die Box, wegen der non-Login, non-interaktive Sitzung, die Capistrano verwendet.

Die Lösung besteht darin, entweder den capistrano-{rvm,chruby,rbenv} Edelstein zu verwenden, der zu Ihrer Umgebung passt, wie im Capfile dokumentiert.

Wenn Sie nicht einen dieser Version Manager verwenden, versuchen Sie dies:

ssh [email protected] 'which bundler' 

Wahrscheinlich werden Sie keine Ausgabe (mehr darüber, warum unter dem Link oben) sehen, löst das, und Capistrano arbeiten.

0

Die ausführbare Datei bundle fehlt im System oder ihr PATH ist der Shell nicht bekannt.

prüfen unten Test:

System kann perl ausführbar finden:

# /usr/bin/env perl 
^C << I did CTRL+C as perl was expecitng me to put some code 

jetzt kann mein System nicht perlyo ausführbare Datei finden und führt den Fehler:

# /usr/bin/env perlyo 
/usr/bin/env: perlyo: No such file or directory 

Above Fehler ist ähnlich wie bei /usr/bin/env bundle, also

DEBUG [f15c9f08] /usr/bin/env: 
DEBUG [f15c9f08] bundle 
DEBUG [f15c9f08] : No such file or directory 

Überprüfung, ob das System kennt bundle von unten Befehl ausführen:

# which bundle 
# whereis bundle 

Wenn es nicht mit oben genannten Befehlen finden kann, dann überprüfen, ob bundle überhaupt auf dem System vorhanden ist, wie unten:

# updatedb 
# locate bundle 

Wenn Sie die bundle finden, dann fügen Sie path entsprechend hinzu, damit Ihre Shell es erkennen kann.

Hoffe, das hilft.

2

Das Problem war in der Tat mit der nicht interaktive Shell.

Schließlich musste ich die folgende Zeile .bashrc hinzufügen:

source ~/.rvm/scripts/rvm 

Bei anderen erhalten in ähnliche Probleme, werde ich hinzufügen, dass ich musste auch die rake Befehl Karte, damit es richtig funktionieren würde. Hatte die folgende Zeile in meiner deploy.rb Datei hinzufügen:

SSHKit.config.command_map[:rake] = "bundle exec rake" 
1

Sie eine bessere Nutzung Capistrano-rbenv gem würde Ihre ror env

  1. hinzufügen gem 'capistrano-rbenv', '~> 2.0' to your gemfile
  2. uncomment require 'capistrano/rbenv' in Ihrem capfile zu verwalten; wenn capistrano/bundler kommentiert Kommentar- es auch
  3. stellen Sie die rbenv_ruby Variable set :rbenv_ruby, '2.0.0-p247' in Ihrer deploy Datei

dann alle gesetzt!

0

Ich konnte das Problem lösen, indem Sie den folgenden Code hinzufügen zu ~/.bashrc:

export RBENV_ROOT="${HOME}/.rbenv" 

if [ -d "${RBENV_ROOT}" ]; then 
    export PATH="${RBENV_ROOT}/bin:${PATH}" 
    eval "$(rbenv init -)" 
fi 
1

Ich bin etwas spät, um die Frage zu beantworten, aber es könnte einige Benutzer wie mir helfen.

Wenn Sie rbenv dann legen Sie die Standardumgebung Ihres rbenv durch Zugabe unterhalb der Linie in deploy.rb

set :default_env, { path: "~/.rbenv/shims:~/.rbenv/bin:$PATH" }

0

verwenden Wie @zpieslak sagte:

dieses Add in ~/.bashrc:

if [ -d "${RBENV_ROOT}" ]; then 
    export PATH="${RBENV_ROOT}/bin:${PATH}" 
    eval "$(rbenv init -)" 
fi 

Vor dieser Zeile:

# If not running interactively, don't do anything 
case $- in 
    *i*) ;; 
     *) return;; 
esac