неопределенный метод `source_index 'для Gem: Module (NoMethodError)

132

Я запускаю приложение Rails 2.3.5, и после запуска скрипта / сервера мне показывается следующее:

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

Если я закомментирую строку 60 в boot.rb (Rails :: GemDependency.add_frozen_gem_path) и запускаю скрипт / сервер, я получаю следующее:

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

Итак, не совсем уверен, что делать. Надеюсь, я смогу быстро помочь. Спасибо!

noodleboy347
источник

Ответы:

294

Я сам столкнулся с этой проблемой, когда пытался обновить старое приложение Rails с REE 1.8.7 до 1.9.3-p385. Как ни странно, Ruby 1.9.3-p327 работает просто отлично. Все свелось к тому, что ruby-1.9.3-p385 установил для меня RubyGems версии 2.0.2, а в 1.9.3-p327 установлен RubyGems v1.8.23.

Gem.source_indexуже давно устарел, но поскольку Rails 2.3 не получает никаких обновлений, кроме критических исправлений безопасности, это никогда не будет исправлено. RubyGems v2.0 окончательно удалил этот метод. Перейдите на любую rubygemsверсию до 2.0.0, например, 1.8.25, чтобы на данный момент вернуть функциональность. Вы можете получить совместимую версию, используя gem update --system 1.8.25.

Очень важно отметить, что Rails 2.3.5 необходимо обновить до минимума 2.3.17. Существуют критические уязвимости системы безопасности, которые открывают возможность для очень неприятных атак. В долгосрочной перспективе обновление до 3.x следует рассматривать как очень острую потребность.

UXP
источник
Спасибо вам большое! Это сработало отлично. И да, спасибо, я нахожусь в процессе обновления до 2.3.17, а затем до последней версии 3.x.
noodleboy347
@uxp Любые советы по этой проблеме: stackoverflow.com/questions/15374188/…
Evolve
87
Любой, кто использует RVM, может позвонить, rvm rubygems latest-1.8чтобы понизить рейтинг рубинов и исправить эту проблему.
Мартин
1
Комментарий Мартина (любой, кто использует RVM, может вызвать rvm rubygems latest-1.8, чтобы понизить версию rubygems и исправить эту проблему.) Помог мне решить мою проблему, из-за которой я застрял на несколько часов. Большое спасибо.
Prajkta P
30
Необходимо принудительно понизить рейтинг Rubygems:rvm rubygems --force latest-1.8
Мэтт Уайт,
28

для пользователей rvm,

rvm install rubygems 1.8.2 --force
Ариварасан Л
источник
1
Мне пришлось вернуться к 1.6.2, чтобы все заработало. Но именно эта команда была необходима.
Зейн
0

Другой способ сделать это состоит в установке slimgems: gem install slimgems. Это плагин RubyGems, который лучше работает со старыми версиями.

johnnyb
источник