วิธีการที่ไม่ได้กำหนด 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

ดังนั้นไม่แน่ใจว่าจะทำอย่างไร หวังว่าฉันจะได้รับความช่วยเหลืออย่างรวดเร็ว ขอบคุณ!

คำตอบ:


295

ฉันเพิ่งพบปัญหานี้ด้วยตัวเองขณะพยายามอัปเกรดแอป 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 จะต้องถือว่าเป็นความต้องการที่แข็งแกร่งมาก


ขอบคุณมาก! มันทำงานได้อย่างสมบูรณ์แบบ และใช่ขอบคุณฉันอยู่ระหว่างการอัปเกรดเป็น 2.3.17 จากนั้นเป็น 3.x ล่าสุด
noodleboy347

@uxp เคล็ดลับสำหรับปัญหานี้: stackoverflow.com/questions/15374188/…
Evolve

87
ทุกคนที่ใช้RVMสามารถโทรrvm rubygems latest-1.8เพื่อดาวน์เกรดทับทิมและแก้ไขปัญหานี้ได้
martin

1
ความคิดเห็นของ Martin (ทุกคนที่ใช้ RVM สามารถเรียก rvm rubygems latest-1.8 เพื่อดาวน์เกรดทับทิมและแก้ไขปัญหานี้ได้) ช่วยฉันแก้ไขปัญหาของฉันซึ่งฉันติดอยู่ตั้งแต่ไม่กี่ชั่วโมง ขอบคุณมาก.
Prajkta P

31
จำเป็นต้องบังคับให้ลดระดับทับทิม:rvm rubygems --force latest-1.8
Matt White



0

วิธีการทำเช่นนี้ก็คือการติดตั้ง gem install slimgemsslimgems: นี่คือทางแยกของ RubyGems ที่ใช้งานได้ดีกว่ากับเวอร์ชันเก่า


0

อัปเดต: นอกจากคำตอบ @uxp แล้วหากคุณเรียกใช้คำสั่งนี้บน Mac ที่ใช้ Catalina มีการเปลี่ยนแปลงคำสั่งเล็กน้อยคุณต้องเพิ่ม -n

ดังนั้นคำสั่งจะเป็น sudo gem update --system -n 1.8.25

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.