2010-11-18 3 views
0

Je reçois l'erreur suivante:Impossible d'activer la gemme: comment déterminer quelle gemme dépend de celle-ci?

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

0,6 est installé localement, 0.8.3 est gelé dans mon application.

Ceci est mon "stacktrace":

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 

Comment puis-je savoir quel bijou ou d'une bibliothèque a une dépendance à l'égard hpricot 0,6?


J'ai ajouté la sortie de la commande de user438962 ci-dessous:

{"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

Y a-t-il une trace de pile? Aussi, je recommande fortement d'utiliser rvm pour empêcher ces choses de se produire: http://rvm.beginrescueend.com/ – Thilo

+0

Il y a une pile courte très courte, ajoutée en question. Et j'adore rvm, mais je ne peux pas l'installer sur ce serveur. –

+1

Cette question est très spécifique et peut être fermée. –

Répondre

2

Si vous utilisez Bundler, vous évitez ce problème et vous avez la commande vraiment super: bundle viz

Cette commande générer un graphique avec toutes les dépendances.

+1

Oui, mais je ne le fais pas, et c'est une application héritée. –

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

La question sera que l'une des gemmes que vous utilisez dépend de la version 0.6.161 hpricot et donc essaie de le charger, mais que vous avez déjà hpricot-0.8.3 chargé. La version la plus récente peut être chargée si vous utilisez hpricot vous-même, et que vous avez besoin de hpricot sans spécifier de version. Si c'est le cas, vous pouvez changer votre propre besoin d'être la même version que l'autre gem utilise (0.6.161). L'autre raison pour laquelle la version plus récente de hpricot est en cours de chargement, peut-être qu'une autre gemme que vous utilisez dépend de cette version de hpricot, ce qui signifie que vous ne pouvez pas utiliser les versions spécifiques de ces deux gemmes exigences pour leur version hpricot.

Utilisez les méthodes que d'autres utilisateurs ont publiées pour vous aider à retrouver les dépendances des gems que vous utilisez.

+0

J'utilise la version 0.8.3 de hpricot - c'est juste que je ne trouve pas la gemme avec la dépendance sur la version 0.6.161. J'ai ajouté la sortie de dépendance à la question. –

+0

Apparemment, toutes les gemmes installées localement sont chargées, parce que je n'utilise que 3, mais je ne sais pas pourquoi. –

+0

Peut-être un plugin ou une gemme vendue dans votre application rails, qui a vendu hpricot 0.6.161? Vérifiez 'vendeur/plugins/**/vendeur /' et 'vendeur/gems/**/vendeur /' pour voir si ont hpricot là-dedans. Ils peuvent avoir la gemme gelée à cette version, mais pas spécifié. – Jeremy

0

Vous pouvez essayer grepper votre chemin de charge:

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

Je trouve que rfeedparser est la pierre précieuse qui utilise hpricot 0,6.

Le problème est que cette version (0.6) fonctionne avec rfeedparser, mais émet l'avertissement "Passer aucun paramètre à XML :: SaxParser.new est obsolète." Eh bien, avec les nouvelles versions de hpricot (au moins 0.8.2), cet avertissement semble avoir pris effet, parce que maintenant avoir cette version de hpricot ou plus récent provoque "ArgumentError: nombre incorrect d'arguments (1 pour 0)" lors de l'appel de FeedParser.parse (url).

Malheureusement, j'ai trouvé que la seule façon de faire fonctionner ce système avec Rails hérité (nous avons une application 2.2.2) est de désinstaller toute version de hpricot qui n'est pas 0.6.

Questions connexes