2011-05-10 8 views
3

RVM에 문제가 있습니다. 일반적으로 프로젝트 별 보석 세트를 사용합니다. 그러나 최근에 @global gemset에 보석을 설치하면 특정 프로젝트에서 일할 때 사용할 수 없습니다. 여기에 hpricot gem을 설치하려고 시도한 예가 있습니다. 이것은 보석을 설치하고 신선한 쉘을 시작한 직후입니다.RVM - @global gemset의 보석을 사용할 수 없음

$ rvm use ruby-1.9.2 
Using /home/bshaver/.rvm/gems/ruby-1.9.2-p180 

$ gem list 

*** LOCAL GEMS *** 

bundler (1.0.12) 
hpricot (0.8.4) 
rake (0.8.7) 

$ rvm use [email protected] 
Using /home/bshaver/.rvm/gems/ruby-1.9.2-p180 with gemset myproject-gems 

$ gem list | grep hpricot 

$ rvm info 

[email protected]: 

    system: 
uname:  "Linux hawkeye.localdomain 2.6.35.12-88.fc14.x86_64 #1 SMP Thu Mar 31 21:21:57 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux" 
bash:  "/bin/bash => GNU bash, version 4.1.7(1)-release (x86_64-redhat-linux-gnu)" 
zsh:   " => not installed" 

    rvm: 
version:  "rvm 1.5.2 by Wayne E. Seguin ([email protected]) [http://rvm.beginrescueend.com/]" 

    ruby: 
interpreter: "ruby" 
version:  "1.9.2p180" 
date:   "2011-02-18" 
platform:  "x86_64-linux" 
patchlevel: "2011-02-18 revision 30909" 
full_version: "ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]" 

    homes: 
gem:   "/home/bshaver/.rvm/gems/[email protected]" 
ruby:   "/home/bshaver/.rvm/rubies/ruby-1.9.2-p180" 

    binaries: 
ruby:   "/home/bshaver/.rvm/rubies/ruby-1.9.2-p180/bin/ruby" 
irb:   "/home/bshaver/.rvm/rubies/ruby-1.9.2-p180/bin/irb" 
gem:   "/home/bshaver/.rvm/rubies/ruby-1.9.2-p180/bin/gem" 
rake:   "/home/bshaver/.rvm/gems/[email protected]/bin/rake" 

    environment: 
PATH:   "/home/bshaver/.rvm/gems/[email protected]/bin:/home/bshaver/.rvm/gems/[email protected]/bin:/home/bshaver/.rvm/rubies/ruby-1.9.2-p180/bin:/home/bshaver/.rvm/bin:/usr/local/java/bin:/usr/lib64/qt-3.3/bin:/usr/lib64/ccache:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/real/RealPlayer/:/home/bshaver/bin:/home/bshaver/test-root/bin:/home/bshaver/Documents/scripts/" 
GEM_HOME:  "/home/bshaver/.rvm/gems/[email protected]" 

GEM_PATH:  "/home/bshaver/.rvm/gems/[email protected]:/home/bshaver/.rvm/gems/[email protected]" 
MY_RUBY_HOME: "/home/bshaver/.rvm/rubies/ruby-1.9.2-p180" 
IRBRC:  "/home/bshaver/.rvm/rubies/ruby-1.9.2-p180/.irbrc" 
RUBYOPT:  "" 
gemset:  "myproject-gems" 

Hpricot을이 프로젝트 gemset의 내부에 사용하지 못할 이유가 뭘까요? 나는 번들과 같은 문제를 가지고 있었지만 결국 gemset에 다시 설치되었습니다.

감사합니다 ..

답변

2

여기에서 문제는 처음으로 hpricot gem을 설치할 때gemset을 gemset을 사용하지 않고 있다는 것입니다.

인터프리터의 기본 gemset과 해당 번역기의gemset이 gemset 사이에 차이가 있습니다.

그래서 당신은

$ rvm use [email protected] 
Using /home/bshaver/.rvm/gems/ruby-1.9.2-p180 with gemset global 

$ gem install validation_refelection 
Fetching: validation_reflection-1.0.0.gem (100%) 
Successfully installed validation_reflection-1.0.0 
1 gem installed 
Installing ri documentation for validation_reflection-1.0.0... 
Installing RDoc documentation for validation_reflection-1.0.0... 

$ rvm use [email protected] 
Using /home/bshaver/.rvm/gems/ruby-1.9.2-p180 with gemset myproject-gems 

$ gem list | grep validation_reflection 
validation_reflection (1.0.0) 

하여 원하는 결과를 얻을 수 있습니다 원하는대로 보석이 프로젝트에 사용할 수 있습니다.

0

내가 같은 일에 달려했던 일부 디버거 콘솔에서 다음

$ gem list 

... 
tzinfo (0.3.29, 0.3.28) 
uglifier (1.0.0) 
wirble (0.1.3) 

이 (루비 1.9.2에 대한 루비 1.8.7 또는 ruby-debug19에 대한 보석 ruby-debug 필요) 실험 : gem list에 나와

ruby-1.9.2-p180 :001 > puts `gem list` #note that those are not quotes, but backticks 

... 
tzinfo (0.3.28) 
wirble (0.1.3) 
=> nil 

모든 것이 gemfile 또는 해당 종속성 중 하나에서 보석이었다. Rails가 Bundler를 호출하여 응용 프로그램을 시작하기 전에 보석 컨텍스트를 작성한다고 생각합니다. 나는 이것을 확실히하기 위해 더 많은 독서가 필요하지만 이것이 사실 인 것으로 보인다.

상황에 따라 gem 'hpricot'을 gemfile에 추가하면 프로젝트의 컨텍스트에서 사용할 수 있습니다.

+0

감사의 말 에릭에게 감사드립니다. 내가 너의 말을 정확히 이해한다면, 나를 위해 일하지 않는다. 'hpricot '을 Gemfile에 추가하면'bundle check'을 넘겨 주어야하지만, Gem_PATH에 missing gem이 설치되어 있어도 ** Gemfile의 의존성을 만족시킬 수 없다. – shakerlxxv

+0

gemfile에 추가 한 후에도'bundle install'을 실행해야합니다. 번들러는 각 프로젝트에 대해 별도의 컨텍스트를 만들고 해당 폴더 만 확인합니다. 'gem install '으로 설치 한 보석은 gemfile에 넣고'bundle install'을 실행하기 전까지는 사용할 수 없습니다. –

+0

아,하지만 '번들 설치'를 실행하면 누락 된 보석의 두 번째 인스턴스가 프로젝트 별 gemset에 설치됩니다. RVM 참조에 따르면 [@global] (https://rvm.beginrescueend.com/gemsets/global/)은 프로젝트간에 젬의 복사본 하나를 공유 할 수 있어야합니다. 그러나 내 보석이 설치되는 2 개의 디렉토리를 찾으려고 할 때 첫 번째 설치 디렉토리가 ** @ global ** gemset 아래에 없었기 때문에 그 해답이 제시되었습니다. – shakerlxxv

관련 문제