2013-10-17 21 views
7

Tôi đang cố triển khai ứng dụng đường ray của mình vào phiên bản EC2 bằng Capistrano 3.0. Tôi hiện đang xếp chồng với đầu ra sau xuất hiện khi chạy "triển khai sản xuất mũ" hoặc "trình tạo gói sản phẩm: cài đặt".Capistrano bundler: cài đặt không thành công

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 

Khi ssh-ing vào máy chủ và chạy lệnh tương tự ("cd/var/www/app/hiện & &/usr/bin/env bó --gemfile/var/www/app/hiện tại/Gemfile --path/var/www/app/shared/bundle --deployment --verbose --binstubs/var/www/app/shared/bin - không có kiểm tra phát triển ") tất cả có vẻ là ok ...

Bắt khá tuyệt vọng về điều này ... Cảm ơn!

Trả lời

4

Các dòng

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]  

biết rằng doanh nghiệp bundler không được tìm thấy, hoặc không được cài đặt. Capistrano (như được ghi ở đây http://www.capistranorb.com/documentation/faq/why-does-something-work-in-my-ssh-session-but-not-in-capistrano/) chạy trong một không đăng nhập, không tương tác shell.

Tôi đoán rằng gói được cài đặt trong một đường dẫn đặc biệt hoặc bạn đang sử dụng rvm, chruby hoặc rbenv. Và rằng những điều này không được khởi tạo như khi bạn SSH vào hộp, vì phiên không tương tác, không đăng nhập mà Capistrano đang sử dụng.

Giải pháp là sử dụng đá quý capistrano-{rvm,chruby,rbenv} phù hợp với môi trường của bạn như được ghi trong Capfile.

Nếu bạn không sử dụng một trong những nhà quản lý phiên bản, hãy thử này:

ssh [email protected] 'which bundler' 

Có lẽ bạn sẽ thấy không có đầu ra (nhiều hơn về lý do tại sao tại liên kết ở trên), giải quyết đó, và Capistrano sẽ làm việc.

0

Số thực thi bundle bị thiếu trong hệ thống hoặc PATH của nó không được biết đến với trình bao.

Kiểm tra dưới đây kiểm tra:

hệ thống có thể tìm perl thực thi:

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

bây giờ, hệ thống của tôi không thể tìm thấy perlyo thực thi và ném các lỗi:

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

lỗi Trên đây là tương tự như những gì bạn nhận được cho /usr/bin/env bundle là:

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

kiểm tra xem hệ thống biết về bundle bằng cách chạy dưới lệnh:

# which bundle 
# whereis bundle 

Nếu nó không thể tìm thấy với các lệnh trên, sau đó kiểm tra xem bundle ở tất cả các tồn tại trên hệ thống như sau:

# updatedb 
# locate bundle 

Nếu bạn tìm thấy bundle, hãy thêm path sao cho vỏ của bạn có thể nhận ra nó.

Hy vọng điều này sẽ hữu ích.

2

Vấn đề thực sự là với vỏ không tương tác.

Cuối cùng tôi đã có thêm dòng sau vào .bashrc:

source ~/.rvm/scripts/rvm 

Trong trường hợp người khác nhận được vào vấn đề tương tự, tôi sẽ thêm rằng tôi cũng đã phải lập bản đồ các lệnh rake vì vậy nó sẽ hoạt động đúng. Phải thêm dòng sau vào tập tin deploy.rb tôi:

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

Bạn muốn tốt hơn sử dụng capistrano-rbenv đá quý để quản lý ROR env của bạn

  1. thêm gem 'capistrano-rbenv', '~> 2.0' to your gemfile
  2. bỏ ghi chú require 'capistrano/rbenv' trong capfile của bạn; nếu capistrano/bundler nhận xét, bỏ ghi chú nó cũng
  3. đặt biến rbenv_ruby set :rbenv_ruby, '2.0.0-p247' trong tập tin triển khai của bạn

thì tất cả đã sẵn sàng!

0

tôi đã có thể giải quyết vấn đề này bằng cách thêm đoạn mã sau vào ~/.bashrc:

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

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

Tôi hơi muộn để trả lời câu hỏi, nhưng nó có thể giúp một số người dùng như tôi.

Nếu bạn đang sử dụng rbenv sau đó thiết lập môi trường mặc định của rbenv của bạn bằng cách thêm bên dưới dòng trong deploy.rb

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

0

Như @zpieslak nói:

thêm này trong ~/.bashrc:

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

Trước dòng này:

# If not running interactively, don't do anything 
case $- in 
    *i*) ;; 
     *) return;; 
esac 
Các vấn đề liên quan