2012-02-14 3 views
0

DreamHost에 전용 호스팅 계정을 개설했습니다. 나는 레일 앱을 배포했다. 다음과 같은 오류가 발생했습니다.번들러 경로에 대한 혼동

You have already activated rack 1.2.1, but your Gemfile requires rack 1.3.6. Using bundle exec may solve this. 

버전을 확인했습니다.

$ gem list -d rack 

rack (1.2.1, 1.1.0, 1.0.1, 1.0.0) 
    Author: Christian Neukirchen 
    Rubyforge: http://rubyforge.org/projects/rack 
    Homepage: http://rack.rubyforge.org 
    Installed at (1.2.1): /usr/lib/ruby/gems/1.8 
       (1.1.0): /usr/lib/ruby/gems/1.8 
       (1.0.1): /usr/lib/ruby/gems/1.8 
       (1.0.0): /usr/lib/ruby/gems/1.8 

랙 1.3.6이 없습니다. 하지만 "번들 쇼"로 검사했을 때 이미 설치되어 있습니다.

$ bundle show rack 
/.../my_rails_app_root/vendor/bundle/ruby/1.8/gems/rack-1.3.6 

(사실은 내가 "번들 --deployment 설치"했다) 그리고

if ENV['MY_RUBY_HOME'] && ENV['MY_RUBY_HOME'].include?('rvm') 
    begin 
    rvm_path  = File.dirname(File.dirname(ENV['MY_RUBY_HOME'])) 
    rvm_lib_path = File.join(rvm_path, 'lib') 
    $LOAD_PATH.unshift rvm_lib_path 
    require 'rvm' 
    RVM.use_from_path! File.dirname(File.dirname(__FILE__)) 
    rescue LoadError 
    # RVM is unavailable at this point. 
    raise "RVM ruby lib is currently unavailable." 
    end 
end 

ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile', File.dirname(__FILE__)) 
require 'bundler/setup' 

이 사실 나는 해결책을 발견 설정/setup_load_paths.rb 있습니다. "gem install rack -v 1.3.6"이 문제를 해결했습니다.

승객은 왜 번들 랙 보석 대신 시스템의 랙 보석 (또는 사용자의 랙 보석)을 픽업합니까? 이 문제를 어떻게 피합니까?

감사합니다. 샘

+0

Rack 1.3.6을 설치하려고했는데 제대로 작동하지 않았습니다. 여전히 "이미 활성화 된 랙 1.2.1"이라고 말하고 있습니다. – mysmallidea

답변

0

일반적으로 이것은 당신이 번들 간부으로 명령 접두어없이 응용 프로그램 (예를 들어 레일 서버)를 실행할 때 당신이 얻을 것입니다. 당신이 번들 --deployment 설치 실행하면

은 들러는 ./vendor/cache에서 보석을 가져다 ./vendor/bundle에서 그들을 구타. 그때부터 Bundler는 어디에서 찾을 수 있는지 알고 있지만 Bundler를 통해 앱을 실행해야합니다.

그러나 Rubygems는이 보석이 어디에 있는지 알지 못하므로 rubygems 명령을 실행할 때 표시되지 않습니다. 보석 목록. Rubygems를 사용하여 Rack 1.3.6을 설치하면 자연스럽게 루비 보석이 그것을 발견하고 앱이 작동하기 시작합니다.

앱을 시작하기 위해 bundler를 사용하지 않으면 루비 젬이 자신의 방식에 따라 앱의 요구 사항을 만족시킬 수 있으며 이는 상당히 임의적입니다. 앱에서 현재 동일한 보석 버전을 실행하고 있다면 매우 놀랍습니다. 예를 들어, 귀하의 테스트를 실행은 (EEK!)

나는 보통 가지고 접근 방식은 젬과 들러의 단일 버전을 서버에서 모든 보석을 제거 설치하는 것입니다, 그리고 내를 유지하기 위해 Bundler를 독점적으로 의존 앱의 보석. 번들러의 장점은 유효한 보석 세트를 계산하고이를 안정적으로 사용한다는 것입니다.

희망이 도움이됩니다.