niezdefiniowana metoda `source_index 'dla Gem: Module (NoMethodError)

132

Używam aplikacji Rails 2.3.5 i po uruchomieniu skryptu / serwera pojawia się następujący komunikat:

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

Jeśli wykomentuję linię 60 w boot.rb (Rails :: GemDependency.add_frozen_gem_path) i uruchomię skrypt / serwer, otrzymam to:

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

Więc nie bardzo wiem, co robić. Mając nadzieję, że uzyskam szybką pomoc. Dzięki!

noodleboy347
źródło

Odpowiedzi:

294

Właśnie napotkałem ten problem, próbując zaktualizować starszą aplikację Rails z REE 1.8.7 do 1.9.3-p385. Co dziwne, Ruby 1.9.3-p327 działa dobrze. Sprowadzało się to do tego, że ruby-1.9.3-p385 zainstalował RubyGems w wersji 2.0.2, a 1.9.3-p327 ma zainstalowany RubyGems v1.8.23.

Gem.source_indexbył przestarzały przez jakiś czas, ale ponieważ Rails 2.3 nie otrzymuje żadnych aktualizacji poza krytycznymi łatkami bezpieczeństwa, to nigdy nie zostanie naprawione. RubyGems v2.0 ostatecznie usunęło tę metodę. Przejdź na dowolną rubygemswersję wcześniejszą niż 2.0.0, na przykład 1.8.25, aby na razie przywrócić tę funkcjonalność. Możesz uzyskać kompatybilną wersję za pomocą gem update --system 1.8.25.

Bardzo ważne na marginesie, Railsy 2.3.5 muszą zostać zaktualizowane do minimum 2.3.17. Istnieją krytyczne luki w zabezpieczeniach, które otwierają Cię na bardzo nieprzyjemne ataki. W dłuższej perspektywie aktualizację do 3.x należy uznać za bardzo silną potrzebę.

uxp
źródło
Dziękuję bardzo! Działało idealnie. I tak, dzięki, jestem w trakcie aktualizacji do wersji 2.3.17, a następnie do najnowszej wersji 3.x.
noodleboy347
@uxp Wszelkie wskazówki dotyczące tego problemu: stackoverflow.com/questions/15374188/ ...
Evolve
87
Każdy, kto używa RVM, może zadzwonić, rvm rubygems latest-1.8aby obniżyć wersję Rubygems i rozwiązać ten problem.
martin
1
Komentarz Martina (każdy, kto używa RVM, może zadzwonić do rvm rubygems najnowsza wersja 1.8, aby obniżyć wersję rubygemów i naprawić ten problem). Pomógł mi rozwiązać problem, w którym utknąłem od kilku godzin. Wielkie dzięki.
Prajkta P
30
Konieczność wymuszenia obniżenia rubygemów:rvm rubygems --force latest-1.8
Matt White
28

dla użytkowników rvm,

rvm install rubygems 1.8.2 --force
Arivarasan L
źródło
1
Musiałem wrócić do wersji 1.6.2, aby to zadziałało. Ale to polecenie było potrzebne.
Zane
0

Innym sposobem, aby to zrobić, to zainstalować slimgems: gem install slimgems. To jest rozwidlenie RubyGems, które działa lepiej ze starszymi wersjami.

johnnyb
źródło