2011-03-03 29 views
235

Khi tôi muốn tạo một dự án Ruby on Rails, tôi nhận được thông báo bên dưới.Uninitialized hằng số ActiveSupport :: Dependencies :: Mutex (NameError)

/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 

Điều gì đã xảy ra? Làm thế nào để sửa nó?

+0

Bạn có thể gửi kết quả của 'gem --version'? –

Trả lời

137

Đây là sự không tương thích giữa Rails 2.3.8 và các phiên bản gần đây của RubyGems. Nâng cấp lên phiên bản 2.3 mới nhất (2.3.11 tính đến hôm nay).

3

Thử cập nhật của Ruby của bạn trên phiên bản Rails để v3.0.5:

gem install rails --version 3.0.5 

hoặc v2.3.11:

gem install rails --version 2.3.11 

Nếu đây không phải là một dự án mới, bạn sẽ phải nâng cấp của bạn ứng dụng phù hợp. Nếu đó là một dự án mới, chỉ cần xóa thư mục bạn đã tạo và tạo lại một dự án mới.

35

Bạn cũng có thể có khả năng có được xung quanh vấn đề này bằng cách yêu cầu 'chủ đề' trong ứng dụng của bạn như vậy:

require 'thread' 

Theo RubyGems 1.6.0 release notes.

3

Như đã đề cập, điều này xảy ra khi sử dụng RubyGems 1.6.0 với phiên bản Ruby on Rails sớm hơn phiên bản 3. Ứng dụng của tôi đang sử dụng Ruby on Rails 2.3.3 được bán vào/vendor của dự án.

Không nghi ngờ gì khi nâng cấp Ruby on Rails lên phiên bản 2.3.X mới hơn cũng có thể khắc phục được sự cố này. Tuy nhiên, vấn đề này ngăn bạn chạy Rake để ra mắt Ruby on Rails và nâng cấp nó.

Thêm yêu cầu 'luồng' lên đầu môi trường.rb không khắc phục được sự cố cho tôi. Thêm yêu cầu 'thread' vào /vendor/rails/activesupport/lib/active_support.rb đã khắc phục được sự cố.

211

Trong trường hợp bạn không thể nâng cấp lên Ruby on Rails 2.3.11 (và để mở rộng câu trả lời của douglasr), cần phải yêu cầu thread ở đầu boot.rb. Ví dụ:

require 'thread' 

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

Nó thậm chí còn dễ dàng hơn để thêm nó ở đầu 'boot.rb'. – nathanvda

+12

Thêm nó vào boot.rb thực ra phải là câu trả lời đúng. – radiospiel

+0

ngay trên, @nathanvda, làm việc như một sự quyến rũ! –

23

Nếu bạn muốn giữ phiên bản giống như đường ray sẽ là 2.3.8 và phiên bản đá quý sẽ là mới nhất. Bạn có thể sử dụng giải pháp này Latest gem with Rails2.x. trong một số thay đổi trong tệp boot.rb và tệp environment.rb.

require 'thread 'trong tệp boot.rb ở trên cùng.

và trong tệp environment.rb, hãy thêm mã sau bên trên khối trình khởi tạo.

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

Cảm ơn, đây là giải pháp duy nhất đã làm cho tôi. –

158

tôi đã có thể khắc phục điều này bằng cách hạ thấp RubyGems đến 1.5.3, vì nó xảy ra với RubyGems 1.6.0+ và Rails < 2.3.11:

gem update --system 1.5.3 

Nếu bạn đã từng hạ cấp xuống một phiên bản cũ hơn và muốn cập nhật lên 1.5.3, bạn có thể nhận được sau khi cố gắng chạy rằng:

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

Nếu bạn nhận được lỗi đó, sau đó cập nhật, do đó nó cho phép bạn xác định phiên bản, và sau đó hạ xuống một lần nữa:

gem update --system 
gem update --system 1.5.3 
+2

Đã xảy ra sự cố khi chạy ứng dụng đường ray 2.3.5 sau khi có đường ray 3 + Rubygems 1.6+.Điều này giải quyết nó, cảm ơn. – RoR

+0

Vẫn hoạt động, cảm ơn –

+4

Làm việc như một sự quyến rũ. Theo nghĩa đen, giống như ma thuật sâu, tối. – bioneuralnet

6

Nếu bạn đang sử dụng Radiant CMS, chỉ cần thêm

require 'thread' 

lên đầu config/boot.rb.

(Kudos để phản ứng nathanvda của Aaron và.)

-1

tôi gửi bài giải pháp của tôi cho những linh hồn thiếu ngủ khác ra khỏi đó:

Nếu bạn đang sử dụng RVM, kích đúp kiểm tra xem bạn' trong thư mục chính xác, sử dụng đúng phiên bản ruby ​​và gemset. Tôi đã có một loạt các tab thiết bị đầu cuối mở và một trong số chúng nằm trong một thư mục khác. gõ "rails console" tạo ra lỗi vì distro ray mặc định của tôi là 2.3.x.

Tôi nhận thấy lỗi trên một phần của mình, cd'd vào đúng thư mục và tệp .rvmrc của tôi đã làm phần còn lại.

RVM là không như Git. Trong git, việc thay đổi các nhánh trong một shell sẽ thay đổi nó ở mọi nơi. Đó là nghĩa đen viết lại các tập tin trong câu hỏi. RVM, mặt khác, chỉ cần thiết lập các biến shell, và phải được thiết lập cho mỗi shell mới mà bạn mở.

Trong trường hợp bạn không quen thuộc với .rvmrc, bạn có thể đặt tệp có tên đó trong bất kỳ thư mục nào và rvm sẽ chọn tệp và sử dụng phiên bản/gemset được chỉ định trong đó, bất cứ khi nào bạn thay đổi thư mục đó. Đây là tệp mẫu .rvmrc:

rvm use [email protected] 

Điều này sẽ chuyển sang phiên bản mới nhất của ruby ​​1.9.2 trong bộ sưu tập RVM của bạn, sử dụng đá quý "rùa". Bây giờ bạn có thể mở một trăm tab trong Terminal (khi tôi kết thúc làm) và không bao giờ lo lắng về phiên bản ruby ​​mà nó trỏ đến.

11

Tôi đã phải đối mặt với vấn đề này trong nhiều dịp khi tôi cố gắng bắt đầu một dự án đường ray cũ 2.3.5 sau khi đã làm việc với đường ray 3>. Trong trường hợp của tôi để giải quyết vấn đề, tôi phải làm một bản cập nhật lên phiên bản 1.4.2 rubygems, đây là:

sudo gem update --system 1.4.2 
+0

Đây là giải pháp tốt nhất cho chúng tôi, vì phiên bản đường ray không thể thay đổi, liên quan quá nhiều đến việc cập nhật, nhưng thay đổi phiên bản đá quý, đẹp và dễ dàng! –

1

cập nhật các rubygems

cập nhật

đá quý --system

Các vấn đề liên quan