ActiveSupport คงที่แบบไม่กำหนดค่าเริ่มต้น :: การพึ่งพา :: Mutex (NameError)


238

เมื่อฉันต้องการสร้างโครงการ Ruby on Rails ฉันได้รับข้อความด้านล่าง

/usr/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:55: uninitialized constant ActiveSupport::Dependencies::Mutex (NameError)
    from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
    from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
    from /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_support.rb:57
    from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
    from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
    from /usr/lib/ruby/gems/1.8/gems/rails-2.3.8/lib/rails_generator.rb:31
    from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
    from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
    from /usr/lib/ruby/gems/1.8/gems/rails-2.3.8/bin/rails:15
    from /usr/bin/rails:19:in `load'
    from /usr/bin/rails:19

มีอะไรผิดพลาด? ฉันจะแก้ไขได้อย่างไร


คุณสามารถโพสต์การส่งออกของgem --version?
Andrew Marshall

คำตอบ:


137

นี่คือความไม่ลงรอยกันระหว่าง Rails 2.3.8 กับ RubyGems เวอร์ชันล่าสุด อัพเกรดเป็นเวอร์ชั่น 2.3 ล่าสุด (2.3.11 ณ วันนี้)


211

ในกรณีที่คุณไม่สามารถอัปเกรด Ruby on Rails 2.3.11 (และจะขยายในคำตอบของ douglasr) จะต้องถูกต้องที่ด้านบนของthread boot.rbตัวอย่างเช่น:

require 'thread'

# Don't change this file!
# Configure your app in config/environment.rb and config/environments/*.rb
...

28
มันง่ายยิ่งกว่าที่จะเพิ่มที่ด้านบนของboot.rbตัวเอง
nathanvda

12
การเพิ่มไปยัง boot.rb ควรเป็นคำตอบที่เหมาะสม
radiospiel

1
ฉันจะเพิ่มเธรดที่ต้องการได้อย่างไร ไฟล์ไหน? ฉันหมายถึงไม่มีการสร้างโครงการราง มันคือการเปลี่ยนแปลงในแกนกลาง?
alfizqu

@alfizqu ไฟล์นี้<RUBYDIR>/lib/ruby/gems/<VERSION>/gems/rails-<VERSION>/environments/boot.rb
JellicleCat

ฉันได้เพิ่มลงใน config / boot.rb แล้ว แต่มันไม่ได้ผลสำหรับฉัน ฉันต้องเพิ่มที่ไหน
Amrit Dhungana

158

ฉันสามารถแก้ไขได้โดยการลดระดับ RubyGems เป็น 1.5.3 เนื่องจากมันเกิดขึ้นกับ RubyGems 1.6.0+ และ Rails <2.3.11:

gem update --system 1.5.3

หากคุณเคยปรับลดรุ่นเป็นรุ่นก่อนหน้านี้แล้วและต้องการอัปเดตเป็น 1.5.3 คุณอาจได้รับสิ่งต่อไปนี้เมื่อพยายามเรียกใช้:

Updating RubyGems
ERROR:  While executing gem ... (RuntimeError)
    No gem names are allowed with the --system option

หากคุณได้รับข้อผิดพลาดนั้นให้อัปเดตเพื่อให้คุณสามารถระบุเวอร์ชันและปรับลดรุ่นอีกครั้ง:

gem update --system
gem update --system 1.5.3

2
มีปัญหาในการใช้งานแอพราง 2.3.5 หลังจากมีราง 3 + Rubygems 1.6+ มันแก้ปัญหาได้แล้วขอบคุณ
RoR

4
มันใช้งานไม่ได้สำหรับฉัน ... undefined local variable or method version_requirements for #<Rails::GemDependency:0x2b001603fe30>
Ray301

ขอบคุณ! ทำงานให้ฉันด้วย:]
mr.pppoe

4
@aaron คุณแก้ไขคำตอบของฉันเพื่อเพิ่ม sudo ต่อหน้าคำสั่ง แต่ afaik sudo นั้นไม่เหมาะสมเสมอไป (เช่นเมื่อใช้ rvm เป็นต้น) ผู้คนสามารถเพิ่มไว้ได้ตามต้องการ
Gary S. Weaver

5
หรือถ้าคุณกำลังใช้ rvm (เหมาะเมื่อต้องการกลับไปและสนับสนุนฐานรหัสเก่า!): rvm rubygems 1.5.3
tardate

35

นอกจากนี้คุณยังสามารถแก้ไขปัญหานี้ได้โดยกำหนดให้ 'เธรด' ในใบสมัครของคุณเป็นเช่น

require 'thread'

เป็นต่อ RubyGems 1.6.0 บันทึกประจำรุ่น


24

หากคุณต้องการให้เวอร์ชันของคุณเหมือน Rails จะเป็น 2.3.8 และ Gem เวอร์ชั่นจะเป็นเวอร์ชั่นล่าสุด คุณสามารถใช้วิธีนี้อัญมณีล่าสุดที่มี Rails2.x ในที่นี้การเปลี่ยนแปลงบางอย่างในไฟล์ boot.rb และไฟล์ environment.rb

require 'thread'ในไฟล์ boot.rb ที่ด้านบน

และในไฟล์ environment.rb เพิ่มรหัสต่อไปนี้ด้านบนบล็อก initializer

if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.3.7')
 module Rails
   class GemDependency
     def requirement
       r = super
       (r == Gem::Requirement.default) ? nil : r
     end
   end
 end
end

4
ขอบคุณนี่เป็นทางออกเดียวที่ทำเพื่อฉัน
Christopher Pickslay

11

ฉันประสบปัญหานี้หลายครั้งเมื่อฉันพยายามเริ่มโครงการรถไฟเก่า 2.3.5 หลังจากทำงานกับราง 3> ในกรณีของฉันเพื่อแก้ปัญหาฉันต้องทำการ rubygems อัปเดตเป็นรุ่น 1.4.2 นี่คือ:

sudo gem update --system 1.4.2

นี่เป็นทางออกที่ดีที่สุดสำหรับเราเนื่องจากเวอร์ชั่นของ Rails ไม่สามารถเปลี่ยนแปลงได้มีส่วนเกี่ยวข้องกับการอัพเดต แต่การเปลี่ยนเวอร์ชั่น Gem นั้นดีและง่าย!
Ian Vaughan

6

หากคุณใช้ Radiant CMS เพียงเพิ่ม

require 'thread'

config/boot.rbไปด้านบนของ

(คำสรรเสริญถึงคำตอบของ Aaron และ nathanvda)


3

อย่างที่กล่าวมานี้เกิดขึ้นเมื่อใช้ RubyGems 1.6.0 กับ Ruby on Rails เวอร์ชันก่อนหน้าเวอร์ชัน 3 แอพของฉันกำลังใช้ Ruby on Rails 2.3.3 ขายอยู่ใน / ผู้ขายของโครงการ

ไม่ต้องสงสัยเลยว่าการอัพเกรด Ruby on Rails เป็นเวอร์ชั่น 2.3.X ที่ใหม่กว่าอาจแก้ไขปัญหานี้ได้ อย่างไรก็ตามปัญหานี้ทำให้คุณรันRake ไม่ได้ให้ Ruby เข้าสู่ Rails และอัพเกรด

การเพิ่มความต้องการ 'thread' ที่ด้านบนของ environment.rb ไม่ได้แก้ไขปัญหาให้ฉัน การเพิ่มต้องการ 'thread' ไปยัง /vendor/rails/activesupport/lib/active_support.rb ได้แก้ไขปัญหาแล้ว


3

ลองอัปเดต Ruby on Rails เป็น v3.0.5:

gem install rails --version 3.0.5

หรือ v2.3.11:

gem install rails --version 2.3.11

หากนี่ไม่ใช่โครงการใหม่คุณจะต้องอัพเกรดแอปพลิเคชันของคุณให้สอดคล้อง หากเป็นโครงการใหม่เพียงแค่ลบไดเรกทอรีที่คุณสร้างขึ้นและสร้างโครงการใหม่อีกครั้ง



-1

ฉันกำลังโพสต์วิธีแก้ปัญหาของฉันสำหรับคนที่อดนอนไม่หลับอื่น ๆ

หากคุณใช้ RVM ให้ตรวจสอบอีกครั้งว่าคุณอยู่ในโฟลเดอร์ที่ถูกต้องโดยใช้ ruby ​​version และ gemset ที่ถูกต้อง ฉันเปิดอาร์เรย์ของแท็บเทอร์มินัลและหนึ่งในนั้นอยู่ในไดเรกทอรีอื่น การพิมพ์ "rails console" ทำให้เกิดข้อผิดพลาดเนื่องจากดิสเรลของรางเริ่มต้นคือ 2.3.x

ฉันสังเกตเห็นข้อผิดพลาดในส่วนของฉัน cd'd ไปยังไดเรกทอรีที่ถูกต้องและไฟล์. rvmrc ของฉันทำส่วนที่เหลือ

RVM ไม่เหมือน Git ในคอมไพล์การเปลี่ยนกิ่งในเปลือกหนึ่งจะเปลี่ยนทุกที่ มันคือการเขียนไฟล์ที่เป็นปัญหาใหม่ ในทางกลับกัน RVM เป็นเพียงการตั้งค่าตัวแปรเชลล์และต้องตั้งค่าสำหรับแต่ละเชลล์ใหม่ที่คุณเปิด

ในกรณีที่คุณไม่คุ้นเคยกับ. rvmrc คุณสามารถใส่ไฟล์ที่มีชื่อนั้นในไดเรกทอรีใดก็ได้และ rvm จะรับมันและใช้ version / gemset ที่ระบุไว้ในนั้นทุกครั้งที่คุณเปลี่ยนเป็นไดเรกทอรีนั้น นี่คือตัวอย่างไฟล์. rmmrc:

rvm use 1.9.2@turtles

สิ่งนี้จะเปลี่ยนเป็น ruby ​​1.9.2 รุ่นล่าสุดในคอลเล็กชัน RVM ของคุณโดยใช้ gemset "turtles" ตอนนี้คุณสามารถเปิดแท็บได้ร้อยแท็บในเทอร์มินัล (อย่างที่ฉันทำ) และไม่ต้องกังวลกับรุ่นทับทิมที่ชี้ไป

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