metode yang tidak ditentukan `source_index 'untuk Permata: Modul (NoMethodError)


132

Saya menjalankan aplikasi Rails 2.3.5 dan saat menjalankan skrip / server saya ditunjukkan sebagai berikut:

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

Jika saya mengomentari baris 60 di boot.rb (Rails :: GemDependency.add_frozen_gem_path) dan menjalankan skrip / server, saya mendapatkan ini:

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

Jadi, tidak begitu yakin apa yang harus dilakukan. Berharap saya bisa mendapatkan bantuan cepat. Terima kasih!

Jawaban:


294

Saya sendiri mengalami masalah ini ketika mencoba untuk meningkatkan aplikasi Rails yang lebih lama dari REE 1.8.7 ke 1.9.3-p385. Anehnya, Ruby 1.9.3-p327 berfungsi dengan baik. Apa yang terjadi adalah ruby-1.9.3-p385 telah menginstal RubyGems versi 2.0.2 untuk saya, dan 1.9.3-p327 memiliki RubyGems v1.8.23 diinstal.

Gem.source_indextelah ditinggalkan untuk sementara waktu, tetapi karena Rails 2.3 tidak mendapatkan pembaruan apa pun kecuali tambalan keamanan penting, ini tidak akan pernah diperbaiki. RubyGems v2.0 akhirnya menghapus metode itu. Turunkan rubygemsversi ke versi apa pun sebelum 2.0.0, seperti 1.8.25 untuk mendapatkan fungsionalitas kembali untuk saat ini. Anda bisa mendapatkan versi yang kompatibel menggunakan gem update --system 1.8.25.

Selain itu sangat penting, Rails 2.3.5 perlu diperbarui ke minimum 2.3.17. Ada kerentanan keamanan kritis yang membuka Anda terhadap beberapa serangan yang sangat buruk. Dalam jangka panjang, peningkatan ke 3.x perlu dianggap sebagai kebutuhan yang sangat kuat.


Terima kasih banyak! Itu bekerja dengan sempurna. Dan ya, terima kasih, saya sedang memperbarui ke 2.3.17, dan kemudian ke 3.x.
noodleboy347

@uxp Kiat apa pun untuk masalah ini: stackoverflow.com/questions/15374188/…
Evolve

87
Siapa pun yang menggunakan RVM dapat menelepon rvm rubygems latest-1.8untuk menurunkan versi rubygem dan memperbaiki masalah ini.
martin

1
Komentar Martin (Siapa pun yang menggunakan RVM dapat memanggil rvm rubygems terbaru-1.8 untuk menurunkan versi rubygem dan memperbaiki masalah ini.) Membantu saya menyelesaikan masalah saya, di mana saya terjebak sejak beberapa jam. Terima kasih banyak.
Prajkta P

30
Perlu untuk memaksa penurunan rubygems:rvm rubygems --force latest-1.8
Matt White

28

untuk pengguna rvm,

rvm install rubygems 1.8.2 --force

1
Saya harus kembali ke 1.6.2 untuk membuatnya bekerja. Tetapi perintah inilah yang dibutuhkan.
Zane


0

Cara lain untuk melakukan ini adalah dengan menginstal slimgems: gem install slimgems. Ini adalah garpu drop-in dari RubyGems yang berfungsi lebih baik dengan versi lama.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.