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


132

J'exécute une application Rails 2.3.5 et lors de l'exécution du script / serveur, les éléments suivants s'affichent:

./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 lance le script / serveur, 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. En espérant pouvoir obtenir une aide rapide. Merci!

Réponses:


294

Je viens de rencontrer ce problème moi-même en essayant de mettre à niveau une ancienne application Rails de REE 1.8.7 à 1.9.3-p385. Curieusement, 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 avait installé RubyGems v1.8.23.

Gem.source_indexest obsolète depuis un certain temps, mais comme Rails 2.3 ne reçoit aucune mise à jour, à l'exception des correctifs de sécurité critiques, cela ne sera jamais corrigé. RubyGems v2.0 a finalement supprimé cette méthode. Revenez à n'importe quelle rubygemsversion antérieure à 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.

En aparté très important, Rails 2.3.5 doit être mis à jour à un minimum de 2.3.17. Il existe des vulnérabilités de sécurité critiques qui vous exposent à des attaques très malveillantes. À long terme, la mise à niveau vers 3.x doit être considérée comme un besoin très important.


Merci beaucoup! Cela a parfaitement fonctionné. Et oui, merci, je suis en train de passer à la version 2.3.17, puis à la dernière version 3.x.
noodleboy347

@uxp Tous les conseils pour ce problème: stackoverflow.com/questions/15374188/…
Evolve

87
Toute personne utilisant RVM peut appeler rvm rubygems latest-1.8pour rétrograder des rubygems et résoudre ce problème.
martin le

1
Le commentaire de Martin (Toute personne utilisant RVM peut appeler rvm rubygems latest-1.8 pour rétrograder rubygems et résoudre ce problème.) M'a aidé à résoudre mon problème, où j'étais bloqué depuis quelques heures. Merci beaucoup.
Prajkta P

30
Besoin de forcer le déclassement des rubygems:rvm rubygems --force latest-1.8
Matt White

28

pour les utilisateurs de rvm,

rvm install rubygems 1.8.2 --force

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


0

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.