2010-11-18 46 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的命令的輸出:

{"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 2010-11-18 08:57:53

+0

有一個很短的堆棧跟蹤,增加了問題。我喜歡rvm,但無法安裝在這臺服務器上。 – 2010-11-18 13:05:07

+1

此問題非常具體,可能會被關閉。 – 2011-05-18 21:54:56

回答

2

如果使用捆紮機,你避免這個問題,你有真正偉大的命令:bundle viz

此命令生成一個包含所有依賴關係的圖。

+1

是的,但我不知道,這是一個傳統的應用程序。 – 2010-11-18 11:23:20

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被加載的另一個原因可能是您使用的另一個gem取決於該版本的hpricot,這意味着您不能使用這兩個gem的特定版本,因爲它們有衝突他們的hpricot版本的要求。

使用其他用戶發佈的方法來幫助您追蹤您正在使用的寶石的依賴關係。

+0

我正在使用hpricot的0.8.3版本 - 只是我無法找到與0.6.161版本相關的gem。我已經添加了依賴輸出到問題。 – 2010-11-18 23:04:07

+0

顯然所有本地安裝的寶石都被加載,因爲我只使用3,但我不知道爲什麼。 – 2010-11-19 09:30:25

+0

也許一個插件或寶石出售到你的Rails應用程序,它有售價的hpricot 0.6.161?檢查'vendor/plugins/**/vendor /'和'vendor/gems/**/vendor /'來查看是否有hpricot。他們可能會在該版本中凍結寶石,但未指定它。 – Jeremy 2010-11-20 05:24:21

0

你可以嘗試grepping您的負載路徑:

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

我發現rfeedparser是使用角度來說,Hpricot 0.6寶石。

問題是此版本(0.6)與rfeedparser一起使用,但發出警告「不向XML :: SaxParser.new傳遞參數」。

那麼,隨着更新版本的hpricot(至少0.8.2),這個警告似乎已經生效,因爲現在擁有該版本的hpricot或更新版本會導致「ArgumentError:錯誤的參數數目(1代表0)」當調用FeedParser.parse(url)。

不幸的是,我發現使用舊版Rails(我們有一個2.2.2應用程序)的唯一方法是卸載任何不是0.6的hpricot版本。