undefinierte Methode `source_index 'für Gem: Module (NoMethodError)

132

Ich führe eine Rails 2.3.5-Anwendung aus und beim Ausführen von Skript / Server wird Folgendes angezeigt:

./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

Wenn ich Zeile 60 in boot.rb (Rails :: GemDependency.add_frozen_gem_path) auskommentiere und script / server ausführe, erhalte ich Folgendes:

=> 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

Also nicht wirklich sicher, was ich tun soll. Ich hoffe, ich kann schnell Hilfe bekommen. Vielen Dank!

noodleboy347
quelle

Antworten:

294

Ich bin gerade selbst auf dieses Problem gestoßen, als ich versucht habe, eine ältere Rails-App von REE 1.8.7 auf 1.9.3-p385 zu aktualisieren. Seltsamerweise funktioniert Ruby 1.9.3-p327 einwandfrei. Es kam darauf an, dass Ruby-1.9.3-p385 RubyGems Version 2.0.2 für mich installiert hatte und 1.9.3-p327 RubyGems v1.8.23 installiert hatte.

Gem.source_indexwurde für eine Weile veraltet, aber da Rails 2.3 außer kritischen Sicherheitspatches keine Updates erhält, wird dies niemals behoben. RubyGems v2.0 hat diese Methode endgültig entfernt. Downgrade auf eine beliebige rubygemsVersion vor 2.0.0, z. B. 1.8.25, um die Funktionalität vorerst wiederherzustellen. Sie können eine kompatible Version mit erhalten gem update --system 1.8.25.

Abgesehen davon muss Rails 2.3.5 auf ein Minimum von 2.3.17 aktualisiert werden. Es gibt kritische Sicherheitslücken, die Sie für einige sehr böse Angriffe öffnen. Langfristig muss ein Upgrade auf 3.x als sehr wichtig angesehen werden.

uxp
quelle
Ich danke dir sehr! Es hat perfekt funktioniert. Und ja, danke, ich bin gerade dabei, ein Upgrade auf 2.3.17 und dann auf das neueste 3.x durchzuführen.
Noodleboy347
@uxp Alle Tipps für dieses Problem: stackoverflow.com/questions/15374188/…
Evolve
87
Jeder, der RVM verwendet, kann rvm rubygems latest-1.8Rubygems herunterstufen und dieses Problem beheben.
Martin
1
Martins Kommentar (Jeder, der RVM verwendet, kann rvm rubygems latest-1.8 aufrufen, um rubygems herunterzustufen und dieses Problem zu beheben.) Hat mir geholfen, mein Problem zu beheben, bei dem ich seit einigen Stunden feststeckte. Vielen Dank.
Prajkta P
30
Notwendigkeit, die Herabstufung von Rubygems zu erzwingen:rvm rubygems --force latest-1.8
Matt White
28

für rvm benutzer

rvm install rubygems 1.8.2 --force
Arivarasan L.
quelle
1
Ich musste zu 1.6.2 zurückkehren, damit dies funktioniert. Aber es war dieser Befehl, der gebraucht wurde.
Zane
0

Eine andere Möglichkeit, dies zu tun, besteht darin, slimgems zu installieren : gem install slimgems. Dies ist eine Drop-In-Gabel von RubyGems, die mit alten Versionen besser funktioniert.

Johnnyb
quelle