未初始化的常数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吗?
安德鲁·马歇尔

Answers:


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 2011年

12
将其添加到boot.rb实际上应该是正确的答案。
radiospiel 2011年

1
我如何添加require线程?在哪个文件中?我的意思是,没有创建Rails项目。是核心的变化吗?
2011年

@alfizqu,文件是<RUBYDIR>/lib/ruby/gems/<VERSION>/gems/rails-<VERSION>/environments/boot.rb
JellicleCat

我已经将它添加到config / boot.rb,但对我不起作用。我必须在哪里添加它?
Amrit Dhungana 2014年

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
在使用Rails 3 + Rubygems 1.6+之后运行2.3.5 rails应用程序时出现问题。这解决了,谢谢。
RoR

4
它对我undefined local variable or method version_requirements for #<Rails::GemDependency:0x2b001603fe30>
不起作用

谢谢!也为我工作:]
mr.pppoe 2011年

4
@aaron您编辑了我的答案以在命令前添加sudo,但是afaik sudo并不总是合适的(例如使用rvm等时)。人们可以根据需要添加它。
加里·韦弗

5
或者如果您使用的是rvm(理想情况下需要返回并支持旧代码库!):rvm ruby​​gems 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文件中的初始化程序块上方添加以下代码。

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 2011年

11

在尝试使用Rails 3>后尝试启动旧的Rails 2.3.5项目时,在很多情况下都遇到过此问题。就我而言,要解决该问题,我必须将rubygems更新为1.4.2版,这是:

sudo gem update --system 1.4.2

这对我们来说是最好的解决方案,因为rails版本无法更改,更新涉及太多,但是更改gem版本非常好用!
伊恩·沃恩

6

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

require 'thread'

config/boot.rb

(对亚伦和内森达的回应表示敬意。)


3

如前所述,当将RubyGems 1.6.0与版本3之前的Ruby on Rails一起使用时,会发生这种情况。我的应用程序使用的是供应到项目/ vendor中的Ruby on Rails 2.3.3。

毫无疑问,将Ruby on Rails升级到更新的2.3.X版本也可以解决此问题。但是,此问题使您无法运行 Rake到供应商Ruby on Rails上并对其进行升级。

在environment.rb的顶部添加require'thread'并不能解决我的问题。将require'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版本和gemset再次检查您是否在正确的文件夹中。我打开了一系列终端选项卡,其中一个位于另一个目录中。键入“ rails console”会产生错误,因为我的默认Rails发行版是2.3.x。

我注意到我的错误,将其CD到正确的目录,而我的.rvmrc文件完成了其余的工作。

RVM是一样的Git。在git中,更改一个shell中的分支会在各处更改它。它实际上是在重写有问题的文件。另一方面,RVM只是设置外壳程序变量,必须为您打开的每个新外壳程序进行设置。

如果您不熟悉.rvmrc,则可以将具有该名称的文件放在任何目录中,并且无论何时切换到该目录,rvm都会选择该文件并使用其中指定的版本/地理集。这是一个示例.rvmrc文件:

rvm use 1.9.2@turtles

这将使用gemset“ turtles”切换到RVM集合中的ruby 1.9.2的最新版本。现在,您可以在Terminal中打开一百个选项卡(就像我最终所做的那样),而不必担心它指向的红宝石版本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.