web-dev-qa-db-ja.com

初期化されていない定数ActiveSupport :: Dependencies :: Mutex(NameError)

Rubyプロジェクトに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

何が間違っているのですか?どうすれば修正できますか?

237
Sokmesa Khiev

これは、Rails 2.3.8とRubyGemsの最新バージョンとの非互換性です。最新の2.3バージョン(今日の2.3.11)にアップグレードします。

137
John

Ruby 2.3.11でRailsにアップグレードできない場合(そしてダグラスの答えを拡張するため)、boot.rbの先頭にthreadが必要です。例えば:

require 'thread'

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

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
158
Gary S. Weaver

また、アプリケーションで「スレッド」を要求することで、この問題を回避することもできます。

require 'thread'

RubyGems 1.6.0 リリースノート に従って。

35
douglasr

Railsのようにバージョンを維持したい場合は2.3.8になり、gemバージョンは最新になります。このソリューションを使用できます Rails2.xでの最新のgem 。この中で、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
24
arunagw

Rails 3>で作業した後、古いRails 2.3.5プロジェクトを開始しようとすると、多くの場合にこの問題に直面しました。私の場合、問題を解決するには、バージョン1.4.2にrubygemsを更新する必要があります。これは次のとおりです。

Sudo gem update --system 1.4.2
11
Tania R

Radiant CMSを使用している場合は、追加するだけです

require 'thread'

config/boot.rbの先頭へ。

(アーロンとナタンブダの反応に対する称賛。)

6
thekingoftruth

RubyバージョンのRailsバージョンをv3.0.5に更新してみてください。

gem install Rails --version 3.0.5

またはv2.3.11:

gem install Rails --version 2.3.11

これが新しいプロジェクトでない場合は、それに応じてアプリケーションをアップグレードする必要があります。新しいプロジェクトの場合は、作成したディレクトリを削除して、新しいプロジェクトを再度作成します。

3
Andrew Marshall

前述のように、これは、バージョン3より前のRubyバージョンでRailsを使用してRubyGems 1.6.0を使用する場合に発生します。私のアプリは、RubyでRails _ 2.3.3プロジェクトの/ vendorにベンダー化。

Ruby上のRailsを新しい2.3.Xバージョンにアップグレードすると、この問題も修正される可能性があります。ただし、この問題により、 Rake をRubyのベンダーRailsに実行してアップグレードできなくなります。

Environment.rbの上部にrequire 'thread'を追加しても問題は解決しませんでした。 /vendor/Rails/activesupport/lib/active_support.rbにrequire 'thread'を追加すると、問題は修正されました。

3
Paul Grayson

rubygemsを更新する

gem update --system

1
Vishnu Atrai