132 votes

méthode non définie `source_index' pour Gem:Module (NoMethodError)

J'exécute une application Rails 2.3.5 et en exécutant script/server, j'obtiens le résultat suivant :

./script/../config/../vendor/rails/railties/lib/rails/gem_dependency.rb:21:in `add_frozen_gem_path': undefined method `source_index' for Gem:Module (NoMethodError)
    from ./script/../config/boot.rb:60:in `load_initializer'
    from ./script/../config/boot.rb:44:in `run'
    from ./script/../config/boot.rb:17:in `boot!'
    from ./script/../config/boot.rb:123
    from script/server:2:in `require'
    from script/server:2

Si je commente la ligne 60 dans boot.rb (Rails::GemDependency.add_frozen_gem_path) et que j'exécute script/server, j'obtiens ceci :

=> Booting WEBrick
=> Rails 2.3.5 application starting on http://0.0.0.0:3000
./script/../config/../vendor/rails/railties/lib/rails/gem_dependency.rb:21:in `add_frozen_gem_path': undefined method `source_index' for Gem:Module (NoMethodError)
    from ./script/../config/../vendor/rails/railties/lib/initializer.rb:298:in `add_gem_load_paths'
    from ./script/../config/../vendor/rails/railties/lib/initializer.rb:132:in `process'
    from ./script/../config/../vendor/rails/railties/lib/initializer.rb:113:in `send'
    from ./script/../config/../vendor/rails/railties/lib/initializer.rb:113:in `run'
    from /home/developer/bigpink/config/environment.rb:13
    from /home/developer/bigpink/vendor/rails/activesupport/lib/active_support/dependencies.rb:156:in `require'
    from /home/developer/bigpink/vendor/rails/activesupport/lib/active_support/dependencies.rb:156:in `require'
    from /home/developer/bigpink/vendor/rails/activesupport/lib/active_support/dependencies.rb:521:in `new_constants_in'
    from /home/developer/bigpink/vendor/rails/activesupport/lib/active_support/dependencies.rb:156:in `require'
    from /home/developer/bigpink/vendor/rails/railties/lib/commands/server.rb:84
    from script/server:3:in `require'
    from script/server:3

Donc, je ne sais pas vraiment quoi faire. J'espère pouvoir obtenir une aide rapide. Merci.

297voto

uxp Points 2247

Je viens moi-même de rencontrer ce problème en essayant de mettre à niveau une ancienne application Rails de REE 1.8.7 vers 1.9.3-p385. Bizarrement, Ruby 1.9.3-p327 fonctionne très bien. En fait, ruby-1.9.3-p385 avait installé RubyGems version 2.0.2 pour moi, et 1.9.3-p327 a installé RubyGems v1.8.23.

Gem.source_index a été déprécié depuis un certain temps, mais comme Rails 2.3 ne reçoit aucune mise à jour, à l'exception des correctifs de sécurité critiques, ce problème ne sera jamais résolu. RubyGems v2.0 a finalement supprimé cette méthode. Rétrogradez vers n'importe quel rubygems version antérieure à la 2.0.0, comme la 1.8.25 pour récupérer la fonctionnalité pour le moment. Vous pouvez obtenir une version compatible en utilisant gem update --system 1.8.25 .

Par ailleurs, il est très important que la version 2.3.5 de Rails soit mise à jour au minimum à la version 2.3.17. Il existe des failles de sécurité critiques qui ouvrent la voie à de très mauvaises attaques. À long terme, la mise à jour vers la version 3.x doit être considérée comme une nécessité absolue.

0 votes

Merci beaucoup ! Cela a parfaitement fonctionné. Et oui, merci, je suis en train de faire la mise à jour vers la 2.3.17, puis vers la dernière 3.x.

0 votes

@uxp Des conseils pour ce problème : stackoverflow.com/questions/15374188/

0 votes

Merci. J'ai également rencontré ce problème lors de la mise à jour de la version 1.8.7 vers 1.9.3-p385.

32voto

arivarasan Points 965

Pour les utilisateurs de rvm,

rvm install rubygems 1.8.2 --force

1 votes

J'ai dû revenir à la version 1.6.2 pour que cela fonctionne. Mais c'est cette commande qui était nécessaire.

26voto

ippa Points 161

Cela m'a aidé : http://djellemah.com/blog/2013/02/27/rails-23-with-ruby-20/

Je l'ai fait en combinaison avec gem update --system 1.8.25 ce qui n'est peut-être pas nécessaire dans votre cas.

1voto

johnnyb Points 3

Une autre façon de procéder est d'installer des slimgems : gem install slimgems . Il s'agit d'un fork de RubyGems qui fonctionne mieux avec les anciennes versions.

0voto

NadZ Points 140

Mise à jour : En plus de la réponse de @uxp, si vous exécutez cette commande sur un Mac exécutant Catalina, il y a un petit changement dans la commande, vous devez ajouter -n.

La commande serait donc sudo gem update --system -n 1.8.25

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X