2014-07-08 5 views
0

최근에 RVM을 사용하여 1.8.3에서 2.0.0으로 Ruby를 업데이트했습니다. 업데이트가 성공적이었으며 명령 줄에서 2.0.0을 실행할 수있었습니다.Ruby 1.8.3을 2.0.0으로 업데이트 한 후 Ruby gem을 업데이트

문제가

, 나는 나침반/말대꾸 보석을 사용하는 프로젝트에 출근하고, 나는 쉘에서 compass watch 명령을 실행하려고 할 때,이 오류가있어 :

/Library/Ruby/Site/1.8/rubygems/dependency.rb:298:in `to_specs': Could not find 'compass' (>= 0) among 7 total gem(s) (Gem::LoadError) 
from /Library/Ruby/Site/1.8/rubygems/dependency.rb:309:in `to_spec' 
from /Library/Ruby/Site/1.8/rubygems/core_ext/kernel_gem.rb:53:in `gem' 
from /usr/bin/compass:22 

내 원래 버전을 루비는 모든 보석을 저장의 여기 설치 한 :

/Library/Ruby/Gems 

그러나 RVM 업데이트 2.0.0에 대한 목록을 여기에 유지되고 같은 보석 :

/Users/Jim/.rvm/gems/[email protected]/gems 

RVM을 사용하여 기존 보석을 업데이트하여 현재 버전의 Ruby에서 사용할 수 있도록하려면 어떻게해야합니까? 그리고 이것은 나에게 나침반에 의존하는 프로젝트에 보석을 다시 설치하도록 요구할 것인가?

저는 rvm.io에서 많은 설명서를 읽었으며 'rvm gemset update'가 작동 할 것이라고 생각했습니다. 나는 또한 'rvm do gemset update'및 'rvm all gemset update'를 시도했지만 오래된 보석을 찾지 못했습니다.

누구든지 RVM을 내 오래된 보석으로 지적하고 2.0.0을 사용할 수있는 gemset으로 업데이트 할 수있는 아이디어가 있습니까?

답변

1

만약 bundler와 Gemfile을 사용하고 있다면, 이런 종류의 문제가 있어서는 안됩니다. 사실 Bundler와 Gemfile을 사용하면 프로젝트에서 작업하는 다른 사람들도 같은 보석을 설치할 수있게됩니다.

/Library/Ruby/Gems 폴더는 보석 설치시 RVM 설치가 아닌 시스템 설치에서 발생할 가능성이 큽니다.

이전의 구성이 RVM을 사용하여 설정 한 프로젝트가 아니라 Ruby의 시스템 설치를 기반으로 한 것으로 보아 사용자 경험에 맞는 설명서를 찾지 못한 이유입니다.

이 문제를 해결할 수있는 몇 가지 옵션이 있지만 Gemfile을 사용하고 Bundler를 사용하여 프로젝트를 관리하는 것이 좋습니다.

+0

내 rvm 설치 이전의 모든 보석은 말한대로 Ruby의 시스템 설치 버전에 설치되었습니다. rvm을 통해 bundler를 실행 하시겠습니까? 현재 로컬 보석 목록 (rvm에서 접근 가능)에'rubygems-bundler (1.4.4)'와'bundler (1.6.2)'가 있습니다. 2.0.0에서 수동으로 보석을 다시 설치하고 싶다면 다음 루비 업데이트시 모든 보석을 업데이트하는 간단한 명령을 실행할 수 있도록이 작업을 수행하는 가장 좋은 방법은 무엇입니까? – Jim

+1

나는'Gemfile'에 지정된 보석을 가지고 있거나 건물에있는 보석이라면'name.gemspec'이 그 정보를 넣을 곳이 될 것입니다. 버전을 지정하지 않거나 최대 버전이없는 최소 버전을 지정하면'bundle install '을 실행하면 지정된 각 보석의 최신 버전이 설치됩니다. '번들 업데이트'는 [documentation] (http://bundler.io/v1.6/man/bundle-update.1.html)에 설명 된대로 보석을 현재 버전으로 업데이트합니다. – vgoff

1

시스템 설정을 마치면 Mac을 사용하고 있고 RVM에 대해 배우기 전에 설치 한 기존 보석을 업데이트하려는 것처럼 보입니다.

내 제안은 다음을 사용하여 원본 보석 목록을 얻는 것입니다.

/usr/bin/gem list 

오히려 하나씩 설치하지 않을 경우,이 코드를 시도 제공 : 약간의 루비 코드는 어쨌든 최신 버전뿐만 아니라 트릭을 할 것 http://www.krzywanski.net/archives/451

합니다. ;)

$ /usr/bin/gem list | ruby -ne 'puts("gem install #{$_.chomp.split[0]}")' > ~/oldgems.sh 
$ chmod +x ~/oldgems.sh && cd 
$ ./oldgems.sh 
+0

나는 에너지를 좋아한다. 이렇게하면 시스템 설치에 설치된 모든 것을 제공 할 수 있지만 프로젝트 관련 항목이 아닌 항목을 제거하려면 해당 목록을 편집해야 할 수도 있습니다. 그러나 그것들을 격리시키는 것은 분명히 당신에게 그 목록을 줄 것입니다. – vgoff

3

이 시도 :

/usr/bin/gem list --no-version > ~/Desktop/old_gems 
xargs gem install < ~/Desktop/old_gems 

첫 번째 명령은 기존의 루비와 관련된 보석을 나열하는 기존의 gem을 말할 것이다, 버전 번호없이, 같은 바탕 화면에 저장되는 "old_gems".

두 번째 명령은 xargs에게 "~/Desktop/old_gems"에 나열된 보석을 설치하기 위해 새 gem에게 알려줍니다. xargs은 명령 줄에 맞추기에 너무 많은 보석이있는 경우 gem을 압도하지 않게됩니다.

새 버전의 Ruby를 설치할 때 매우 비슷한 방법을 사용하며, 함께 사용하기위한 원시 보석 세트가 필요합니다.


The first command throws an uninitialized constant error...

... /Library/Ruby/Site/1.8 ...

문제

은 아마 당신의 루비의 나이 때문이다. 1.8은 정말로 오래되었고 더 이상 사용하지 않아서 보석으로 인해 --no-version 플래그를 알 수 없다고 생각됩니다. 대신,이 시도 : 당신은 그래서 당신이 도구가 무엇을 알고 the RVM documentation을 통해 읽을 시간이 걸릴하는

/usr/bin/gem list | awk '{print $1}' > ~/Desktop/old_gems 
xargs gem install < ~/Desktop/old_gems 

I found the rvm use system command...

은 음 ... 정말 똑똑한 것. rvm use system은 명령의 가장 기본적인 기능 중 하나이며 RVM 또는 rbenv와 같은 샌드 박스를 사용하는 주된 이유입니다. 해당 정보는 "Setting the default Ruby"을 참조하십시오.

또한 버그 수정 및 새로운 버전의 Ruby를 사용할 수 있도록 RVM 버전을 계속 유지하는 것이 매우 중요합니다. 방법은 "Upgrading RVM"을 참조하십시오.

마지막으로 Ruby/RVM 에코 시스템의 위치를 ​​알아야 할 때마다 rvm info을 사용하십시오.

+0

명령 제안을 주셔서 감사합니다. 이것은 내가하고 싶은 일과 똑같은 것 같습니다. 첫 번째 명령은 초기화되지 않은 상수 오류를 발생시킵니다 : – Jim

+0

'Jim $/usr/bin/gem list --no-version> ~/Desktop/old_gems /Library/Ruby/Site/1.8/rubygems/config_file.rb:39 : 초기화되지 않았습니다. 상수 Gem :: UserInteraction (NameError)' 그 다음에는 /Library/Ruby/Site?1.8/rubygems에있는 문제가있는 약 30 개의 Ruby 파일을 나열합니다. 나는 수동으로 보석을 다시 설치 하시겠습니까? 내 2.0.0 gemset의 일부로 보석을 설치하려면 보석을 설치해야합니까? 감사. – Jim

+0

시스템 루비 버전을 찾고있는 기존 프로젝트에서 문제가 발생한 것처럼 보입니다. rvm 2.0.0을 실행하는 동안 어떤 프로젝트에서도'compass watch '를 사용하거나이 프로젝트의 코드를 github에 푸시 할 수 없었습니다. 나는 정말로 큰 일을 깨뜨린 것에 대해 걱정하기 시작했다. 그러나 rvm에서 조금 더 문서를 읽은 후, 나는 rvm use system 명령을 발견했다. 루비를 원래 버전으로 복원했다. 이제 성공적으로 나침반을 사용하여 github에 푸시 할 수 있습니다. 휴! – Jim