2011-12-04 3 views
1

저는 Capistrano의 새로운 사용자이고 레일즈 3.1 앱을 배포하는 데 사용합니다. 원격 서버에 보석 설치에 문제가있는 것 같습니다. 나는 다음과 같은 질문이레일, 새로운 우분투 설치, 카피 스트라 노, rvm 문제

: 그것은이 뚜껑처럼 보이는

  1. 는 번들이 gemfile에 설치 실행? 이 작업에 대한 종속성이 있습니까? 내 서버에 rvmbundler이 있습니다. 이미 설치된 레일이 필요합니까?

  2. 내가 수동처럼 내 deploy.rb에서 bundle_cmd 설정 한
  3. :

    set :bundle_cmd, '/usr/local/rvm/gems/ruby-1.9.2-p290/bin/bundle' 
    

    이 정확해야을?

  4. 모자가 필요한 모든 보석이 있다는 것을 확인하는 방법이 있습니까? 또는 원격 서버에서 실패한 번들 설치를 디버그하는 가장 좋은 방법은 무엇입니까? cap gem-list과 같은 것을 부를 수 있습니까? cap invoke=gem list 같은 것을 원했지만 그렇게 보이지 않았습니다.

편집 # 1

나는 다음과 같은 오류를 받고 있어요 : 실패 : "rvm_path =/usr/지방/RVM/usr/지방/RVM/빈/RVM-쉘 '기본 '-c'cd/data/sites/myserver/apps/myapp/releases/20111204181321& & 번들 설치 --gemfile/data/sites/myserver/apps/myapp/releases/20111204181321/Gemfile --path/data/sites/myserver/apps/myapp/shared/bundle --deployment --quiet - 개발 테스트없이 '173.230.xxx.xxx에

만약 내가 이전 릴리스로 이동하여 번들 설치를 실행하면 설치되지 않은 모든 것이 올바르게 설치되었다고합니다.

Your bundle is complete! It was installed into /data/sites/myserver/apps/myapp/shared/bundle 

을하지만 난 거기에 가면, 루비 1.9.1 내가 설치하지 않은 내 지식의 최선 (사용 루비 이외의 아무것도 없다 1.9.2- :

이 말한다 p290)

배치 된 릴리스를 삭제하지 않도록 지정하여 명시 적으로 디버깅 할 수있는 방법이 있습니까? 내 deploy.rb 스크립트에서 내 bundler 경로를 하드 코딩해야합니까?

내가에서 현재 릴리스로 갈 경우

은 들으 다시

편집 2 는 :

/data/sites/myserver/apps/myapp/current 

및 실행

$ which bundle 
/usr/local/rvm/gems/ruby-1.9.2-p290/bin//bundle 

를 내가 얻을 :

$ bundle install 
/usr/local/rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find bundler (>= 0) amongst [minitest-1.6.0,rake-0.8.7, rdoc-2.5.8] (Gem::LoadError) 
from /usr/local/rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:256:in `to_spec' 
from /usr/local/rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems.rb:1210:in `gem' 
from /usr/local/rvm/gems/ruby-1.9.2-p290/bin/bundle:18:in `<main>' 
+0

'cap shell'(로컬)을 시도한 다음 capistrano 쉘에서'rvm current'와'which bundle'을 실행할 수 있습니까? Capistrano 셸은 뚜껑이 보이는 환경에서 작업 할 수있는 기회를 제공합니다. – HectorMalot

답변

1
  1. 레일을 설치할 필요는 없지만 번들러를 설치해야한다고 생각합니다.gem install bundler

  2. capistrano의 RVM 및 번들러 통합을 사용할 수 있습니다. 이 경우 bundler 경로를 설정하지 않아도됩니다.

    $:.unshift(File.expand_path('./lib', ENV['rvm_path'])) 
    require "rvm/capistrano"  
    require "bundler/capistrano"  # Load RVM's capistrano plugin. 
    
    set :rvm_type, :system 
    set :rvm_ruby_string, '[email protected]_name' 
    
  3. 'cap shell'을 사용하여 서버의 Capistrano를 통해 명령을 실행할 수 있습니다. 이것을 사용하여 모든 보석 설치를 점검 할 수 있습니다. 모든 가능성을 보려면 cap -T을 사용하십시오.

사이드 노트에서 앱에 정말로 rvm 보석 세트가 필요합니까? RVM을 사용하여 프로덕션 서버에서 루비를 설치하고 업데이트하지만 Bundler는 내 보석 분리를 처리합니다. 프로덕션의 기본 번들러 설정은 모든 보석을 공급 업체/번들에 넣기 때문에 이미 보석을 서로 구분합니다. 이것은 Capistrano와도 훌륭하게 작동합니다.

비슷한 질문 및 대답 here을 참조하십시오. capistrano/bundler/rvm/passenger 설정에 대한 더 많은 정보는 this tutorial에서 찾을 수 있습니다.

관련 문제