未初始化的常量ActiveSupport :: Dependencies :: Mutex(NameError)

Sok*_*iev 238 compatibility rubygems ruby-on-rails

当我想创建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
Run Code Online (Sandbox Code Playgroud)

出了什么问题?我该如何解决?

Aar*_*on 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
...
Run Code Online (Sandbox Code Playgroud)

  • 将它添加到`boot.rb`本身的顶部更容易. (28认同)
  • 将它添加到boot.rb应该是正确的答案. (12认同)

Gar*_*ver 158

我能够通过将RubyGems降级到1.5.3来解决这个问题,因为它发生在RubyGems 1.6.0+和Rails <2.3.11中:

gem update --system 1.5.3
Run Code Online (Sandbox Code Playgroud)

如果您之前已降级到更早版本并希望更新到1.5.3,则在尝试运行时可能会得到以下内容:

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

如果您收到该错误,请更新,以便它允许您指定版本,然后再次降级:

gem update --system
gem update --system 1.5.3
Run Code Online (Sandbox Code Playgroud)

  • 或者如果你正在使用rvm(当需要返回并支持旧的代码库时是理想的!):rvm ruby​​gems 1.5.3 (5认同)
  • 工作就像一个魅力.从字面上看,就像深沉的黑暗魔法一样. (4认同)
  • 它对我不起作用......`#Rails :: GemDependency:0x2b001603fe30>的未定义局部变量或方法version_requirements (4认同)
  • @aaron你编辑了我在命令前面添加sudo的答案,但afaik sudo并不总是合适的(比如使用rvm等).人们可以根据需要添加它. (4认同)
  • 有轨道3 + Rubygems 1.6+后运行2.3.5 rails应用程序的问题.这解决了,谢谢. (2认同)

Joh*_*ohn 137

这是Rails 2.3.8和最新版本的RubyGems之间的不兼容性.升级到最新的2.3版本(截至今天的2.3.11).


dou*_*asr 35

您也可以通过在应用程序中要求"线程"来解决此问题:

require 'thread'
Run Code Online (Sandbox Code Playgroud)

根据RubyGems 1.6.0 发行说明.


aru*_*agw 24

如果你想保持你的版本相同像rails将是2.3.8并且gem版本将是最新的.您可以使用此解决方案使用Rails2.x的最新gem.在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
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这是为我做的唯一解决方案. (4认同)

Tan*_*a R 11

当我在使用rails 3>之后尝试启动旧的rails 2.3.5项目时,我在许多场合遇到了这个问题.在我解决问题的情况下,我必须对版本1.4.2进行rubygems更新,这是:

sudo gem update --system 1.4.2
Run Code Online (Sandbox Code Playgroud)


the*_*uth 6

如果您使用的是Radiant CMS,只需添加即可

require 'thread'
Run Code Online (Sandbox Code Playgroud)

到顶部config/boot.rb.

(感谢Aaron和nathanvda的回应.)