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!

noodleboy347
la source

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.

uxp
la source
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
Arivarasan L
la source
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.

johnnyb
la source