초기화되지 않은 상수 ActiveSupport :: Dependencies :: 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과 최신 버전의 RubyGem과 호환되지 않습니다. 최신 2.3 버전으로 업그레이드하십시오 (오늘 현재 2.3.11).


211

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

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

2
레일 3 + Rubygems 1.6 이상을 사용한 후 2.3.5 레일 앱을 실행하는 데 문제가 있습니다. 덕분에 해결되었습니다.
RoR

4
그것은 나를 위해 작동하지 않습니다 ... undefined local variable or method version_requirements for #<Rails::GemDependency:0x2b001603fe30>
Ray301

감사합니다! 나를 위해 일해라 :]
mr.pppoe

4
@aaron 당신은 명령 앞에 sudo를 추가하기 위해 내 대답을 편집했지만 afaik sudo가 항상 적절한 것은 아닙니다 (rvm을 사용할 때 등). 사람들은 필요에 따라 추가 할 수 있습니다.
게리 S. 위버

5
또는 rvm을 사용하는 경우 (이전 코드베이스를 지원해야하는 경우 이상적입니다!) : rvm rubygems 1.5.3
tardate


24

레일과 같이 버전을 동일하게 유지하려면 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

4
고마워, 이것은 나를 위해 그것을 한 유일한 솔루션입니다.
Christopher Pickslay 2012 년

11

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

sudo gem update --system 1.4.2

Rails 버전을 변경할 수없고 업데이트하는 데 너무 많이 관여하지만 gem 버전을 변경하는 것이 쉽고 쉬운 방법입니다.
Ian Vaughan

6

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

require 'thread'

의 상단으로 config/boot.rb.

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


3

언급했듯이 루비 온 레일즈 버전 3 이전의 루비 온즈 1.6.0을 사용할 때 발생합니다. 내 앱은 프로젝트의 / 벤더에 벤더로 공급 된 루비 온 레일즈 2.3.3을 사용하고 있습니다.

의심 할 여지없이 Ruby on Rails를 최신 2.3.X 버전으로 업그레이드해도이 문제가 해결 될 수 있습니다. 그러나이 문제로 인해 Rake 를 실행 하여 Ruby on Rails를 공급 업체로 업그레이드하고 업그레이드 할 수 없습니다.

environment.rb 상단에 'thread'를 추가해도 문제가 해결되지 않았습니다. /vendor/rails/activesupport/lib/active_support.rb에 'thread'필요를 추가하면 문제가 해결되었습니다.


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을 사용하는 경우 올바른 루비 버전과 보석 세트를 사용하여 올바른 폴더에 있는지 다시 확인하십시오. 터미널 탭 배열이 열려 있고 그 중 하나가 다른 디렉토리에있었습니다. "rails console"을 입력하면 기본 레일 배포판이 2.3.x이므로 오류가 발생했습니다.

내 부분에서 오류를 발견하고 올바른 디렉토리로 cd하고 내 .rvmrc 파일이 나머지 작업을 수행했습니다.

RVM은 하지 힘내처럼. git에서 하나의 쉘에서 브랜치를 변경하면 어디서나 변경됩니다. 말 그대로 문제의 파일을 다시 작성합니다. 반면에 RVM은 쉘 변수를 설정하기 때문에 열려있는 각 새로운 쉘에 대해 설정해야합니다.

.rvmrc에 익숙하지 않은 경우 해당 디렉토리에 해당 이름을 가진 파일을 넣을 수 있으며 rvm은 해당 디렉토리로 변경할 때마다 파일을 선택하여 지정된 버전 / gemset을 사용합니다. 샘플 .rvmrc 파일은 다음과 같습니다.

rvm use 1.9.2@turtles

gemset "turtles"를 사용하여 RVM 컬렉션에서 최신 버전의 ruby ​​1.9.2로 전환됩니다. 이제 터미널에서 수백 개의 탭을 열 수 있으며 (내가하는대로) 루비 버전에 대해 걱정할 필요가 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.