[ruby-on-rails] 초기화되지 않은 상수 ActiveSupport :: Dependencies :: Mutex (NameError)

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

무엇이 잘못 되었습니까? 어떻게 고치나요?



답변

이것은 Rails 2.3.8과 최신 버전의 RubyGem과 호환되지 않습니다. 최신 2.3 버전으로 업그레이드하십시오 (오늘 현재 2.3.11).


답변

Ruby on Rails 2.3.11로 업그레이드 할 수없고 (더글라스의 대답으로 확장 thread하려면) 맨 위에 있어야합니다 boot.rb. 예를 들면 다음과 같습니다.

require 'thread'

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


답변

RubyGems 1.6.0 이상 및 Rails <2.3.11에서 발생하므로 RubyGems를 1.5.3으로 다운 그레이드하여이 문제를 해결할 수있었습니다.

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


답변

다음과 같이 응용 프로그램에서 ‘스레드’를 요구하여이 문제를 해결할 수도 있습니다.

require 'thread'

RubyGems 1.6.0 릴리스 노트에 따라 .


답변

레일과 같이 버전을 동일하게 유지하려면 2.3.8이고 보석 버전이 최신 버전입니다. 이 솔루션을 최신 gem과 함께 Rails2.x와 함께 사용할 수 있습니다 . 이 부분에서 boot.rb 파일과 environment.rb 파일의 일부가 변경되었습니다.

require 'thread상단의 boot.rb 파일에서 ‘.

environment.rb 파일에서 초기화 블록 위에 다음 코드를 추가하십시오.

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


답변

레일 3으로 작업 한 후 오래된 레일 2.3.5 프로젝트를 시작하려고 할 때 많은 경우 에이 문제에 직면했습니다. 내 문제를 해결하려면 루비 젬을 1.4.2 버전으로 업데이트해야합니다.

sudo gem update --system 1.4.2


답변

Radiant CMS를 사용하는 경우 간단히 추가하십시오

require 'thread'

의 상단으로 config/boot.rb.

(아론과 nathanvda의 답변에 대한 쿠도스)