当我想创建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
出了什么问题?我该如何解决?
答案 0 :(得分:211)
如果您无法升级到Ruby on Rails 2.3.11(并扩展douglasr的答案),thread
顶部必须{}} {}。例如:
boot.rb
答案 1 :(得分: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 :(得分:137)
这是Rails 2.3.8与最近版本的RubyGems之间的不兼容性。升级到最新的2.3版本(截至今天的2.3.11)。
答案 3 :(得分:35)
答案 4 :(得分:24)
如果你想保持你的版本相同,像rails将是2.3.8,宝石版本将是最新的。您可以使用此解决方案Latest gem with Rails2.x。在boot.rb文件和environment.rb文件中进行了一些更改。
位于顶部的boot.rb文件中的 require 'thread
'。
并在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
答案 5 :(得分:11)
我在使用rails 3>工作后尝试启动旧的rails 2.3.5项目时,在许多场合遇到了这个问题。在我解决问题的情况下,我必须对版本1.4.2进行rubygems更新,这是:
sudo gem update --system 1.4.2
答案 6 :(得分:6)
如果您使用的是Radiant CMS,只需添加
即可require 'thread'
到config/boot.rb
的顶部。
(感谢Aaron和nathanvda的回应。)
答案 7 :(得分:3)
尝试将Ruby on Rails版本更新到v3.0.5:
gem install rails --version 3.0.5
或v2.3.11:
gem install rails --version 2.3.11
如果这不是新项目,则必须相应地升级您的应用程序。如果它是一个新项目,只需删除您在其中创建的目录并再次创建一个新项目。
答案 8 :(得分:3)
如上所述,当使用RubyGems 1.6.0和版本3之前的Ruby on Rails版本时会发生这种情况。我的应用程序使用Ruby on Rails 2.3.3销售到项目的/供应商。
毫无疑问,将Ruby on Rails升级到更新的2.3.X版本也可以解决这个问题。但是,此问题会阻止您运行Rake以展开Ruby on Rails并升级它。
在环境的顶部添加require'trread'.rb并没有为我解决问题。向/vendor/rails/activesupport/lib/active_support.rb添加require'trread'确实解决了这个问题。
答案 9 :(得分:1)
更新rubygems
gem update --system
答案 10 :(得分:-1)
我正在为其他睡眠不足的灵魂发布我的解决方案:
如果您正在使用RVM,请使用正确的ruby版本和gemset仔细检查您是否在正确的文件夹中。我打开了一系列终端选项卡,其中一个位于不同的目录中。键入“rails console”会产生错误,因为我的默认rails distro是2.3.x。
我注意到了我的错误,cd到了正确的目录,我的.rvmrc文件完成了其余的工作。
RVM 不像Git那样。在git中,在一个shell中更改分支会在任何地方更改它。它实际上是重写有问题的文件。另一方面,RVM只是设置shell变量,必须为你打开的每个新shell设置。
如果您不熟悉.rvmrc,可以将具有该名称的文件放在任何目录中,只要您更改到该目录,rvm就会将其选中并使用其中指定的版本/ gemset。这是一个示例.rvmrc文件:
rvm use 1.9.2@turtles
这将使用gemset“turtles”在您的RVM集合中切换到最新版本的ruby 1.9.2。现在你可以在Terminal中打开一百个标签(我最后这样做)并且从不担心它所指向的ruby版本。