2010-11-18 3 views
0

나는 다음과 같은 오류 받고 있어요 :보석을 활성화 할 수 없습니다 :이 보석에 어떤 보석이 있는지 어떻게 알 수 있습니까?

Gem::Exception: can't activate hpricot (= 0.6.161, runtime), 
already activated hpricot-0.8.3 

0.6 로컬 설치되어, 0.8.3은 내 응용 프로그램에 고정된다.

이 내 "스택 트레이스"입니다 :

Loading production environment (Rails 2.3.10) 
/software/ruby-ror-gem-1.3.1/lib/rubygems.rb:149:in `activate':Gem::Exception: can't activate hpricot (= 0.6.161, runtime), already activated hpricot-0.8.3 
/e/app/www.example.com/rails/releases/20101117142713/vendor/rails/railties/lib/console_with_helpers.rb:5:NameError: uninitialized constant ApplicationController 

가 어떻게 보석 또는 라이브러리가 Hpricot을 0.6에 종속 알아낼 수 있습니까?


나는 아래 user438962의 명령의 출력 추가 한 : 당신이 Bundler 프로그램을 사용하는 경우, 당신은이 문제를 방지

{"daemons-1.0.9"=>[], 
"scgi_dp_rails-0.0.5"=>["preforkdp", "daemons"], 
"rails-2.3.10"=>[], 
"rwfd-0.1.0"=>[], 
"nokogiri-1.3.2"=>["racc", "rexical", "rake-compiler", "hoe"], 
"activesupport-2.3.10"=>[], 
"rack-1.0.1"=> 
    ["test-spec", 
    "camping", 
    "fcgi", 
    "memcache-client", 
    "mongrel", 
    "ruby-openid", 
    "thin"], 
"rack-1.1.0"=> 
    ["test-spec", "camping", "fcgi", "memcache-client", "mongrel", "thin"], 
"preforkdp-0.1.2"=>["rwfd"], 
"activerecord-2.3.10"=>[], 
"hpricot-0.6.161"=>[], 
"cgi_multipart_eof_fix-2.5.0"=>[], 
"fastthread-1.0.1"=>[], 
"gem_plugin-0.2.3"=>[], 
"activeresource-2.3.10"=>[], 
"ferret-0.11.6"=>["rake"], 
"mysql-2.7"=>[], 
"actionmailer-2.3.10"=>[], 
"actionpack-2.3.10"=>[], 
"hpricot-0.8.3"=>[], 
"mongrel_upload_progress-0.2.2"=>["mongrel", "gem_plugin"], 
"mongrel-1.1.3"=> 
    ["gem_plugin", "daemons", "fastthread", "cgi_multipart_eof_fix"], 
"mongrel_cluster-1.0.5"=>["gem_plugin", "mongrel"], 
"rake-0.8.4"=>[], 
"haml-2.0.9"=>[], 
"remvee-mini_magick-1.2.3.4.0"=>[]} 
+1

스택 추적이 있습니까? 또한 rvm을 사용하여 이러한 일이 발생하지 않도록하는 것이 좋습니다. http://rvm.beginrescueend.com/ – Thilo

+0

질문에 추가 된 매우 짧은 스택 추적이 있습니다. 그리고 저는 rvm을 좋아하지만이 서버에 설치할 수는 없습니다. –

+1

이 질문은 매우 구체적이며 닫힐 수 있습니다. –

답변

2

당신은 정말 좋은 명령이 있습니다 bundle viz

이 명령을 모든 의존성을 가진 그래프를 생성한다.

+1

예,하지만 그렇지 않습니다. 이는 기존 앱입니다. –

1
require 'rubygems' 
require 'pp' 
h = {} 
Gem.source_index.each{|g, spec| h[g] = spec.dependencies.map{|d| d.name} } 
pp h 
0

문제는 사용하는 보석 중 하나가 Hpricot을 버전 0.6.161 에 따라 달라집니다 그래서로드하려고 시도하지만 이미 것을 Hpricot을-0.8.3로드하는 것이 될 것입니다. hpricot을 직접 사용하는 경우 최신 버전이로드 될 수 있으며 버전을 지정하지 않고 hpricot을 사용해야합니다. 이 경우 다른 보석 사용 (0.6.161)과 동일한 버전으로 자신의 필요를 변경할 수 있습니다.

최신 버전의 hpricot이로드되는 다른 이유는 사용하는 다른 보석이 해당 hpricot 버전에 따라 달라질 수 있습니다. 즉, 충돌하는 두 보석의 특정 버전을 사용할 수 없음을 의미합니다. hpricot 버전의 요구 사항.

다른 사용자가 게시 한 방법을 사용하여 사용중인 보석의 종속성을 추적하는 데 도움이됩니다.

+0

나는 0.8.3 버전의 hpricot을 사용하고 있습니다. 단지 0.6.161 버전에 의존하여 보석을 찾을 수 없습니다. 종속성 출력을 질문에 추가했습니다. –

+0

3 개만 사용했기 때문에 로컬에 설치된 모든 보석이로드 된 것 같습니다.하지만 그 이유는 모르겠습니다. –

+0

아마도 hpricot 0.6.161을 납품 한 레일 앱에 플러그인이나 보석이 포함되어 있을까요? 'vendor/plugins/**/vendor /'와'vendor/gems/**/vendor /'에서 hpricot이 있는지 확인하십시오. 그들은 그 버전에서 보석을 가지고 있을지도 모릅니다. – Jeremy

0

당신은 당신의 부하 경로를 grepping 시도 할 수 :

$:.each do |dir| 
    cmd = %(grep -r hpricot #{dir}) 
    puts cmd 
    puts `#{cmd}` 
end 
1

는 그 rfeedparser이 0.6 Hpricot을 사용하는 보석입니다 발견했다.

이 버전 (0.6)은 rfeedparser와 함께 작동하지만 "XML :: SaxParser.new에 매개 변수를 전달하지 않습니다."라는 경고가 표시됩니다.

새 버전의 hpricot (최소 0.8.2 이상)에서 hpricot 이상의 버전을 사용하면 "ArgumentError : 잘못된 인수 수 (1에 대해 0)"가 ​​발생하므로이 경고가 적용된 것 같습니다. FeedParser.parse (url)를 호출 할 때.

유감스럽게도 레거시 레일즈 (2.2.2 앱 있음)에서이 작업을 수행하는 유일한 방법은 0.6이 아닌 hpricot 버전을 제거하는 것입니다.

관련 문제