当我想创建一个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和gem版本将是最新的。您可以使用Rails2.x最新宝石解决方案。在这方面的一些变化在引导。Rb文件和环境。rb文件。

在引导中需要“线程”。Rb文件在顶部。

还有环境。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

其他回答

更新rubygems

Gem更新——system

如果你不能升级到Ruby on Rails 2.3.11(扩展douglasr的回答),在boot.rb的顶部必须需要thread。例如:

require 'thread'

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

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

我可以通过将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

如果你使用辐射式CMS,只需添加

require 'thread'

到config/boot.rb的顶部。

(Aaron和nathanvda的回答很赞。)