初期化されていない定数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か?
Andrew Marshall

回答:


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プロジェクトはありません。コアの変化ですか?
alfizqu

@alfizqu、ファイルは<RUBYDIR>/lib/ruby/gems/<VERSION>/gems/rails-<VERSION>/environments/boot.rb
JellicleCat 2012

config / boot.rbに追加しましたが、うまくいきませんでした。どこに追加する必要がありますか?
Amrit Dhungana 2014年

158

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

2
rails 3 + Rubygems 1.6+の後に2.3.5 railsアプリを実行すると問題が発生しました。これで解決しました、ありがとう。
RoR 2011

4
それは私のために働いていません... undefined local variable or method version_requirements for #<Rails::GemDependency:0x2b001603fe30>
Ray301

ありがとうございました!私にも働きます:]
mr.pppoe

4
@aaronは私の回答を編集してコマンドの前にsudoを追加しましたが、afaik sudoが常に適切であるとは限りません(rvmを使用する場合など)。必要に応じて追加できます。
ゲーリーS.ウィーバー

5
または、rvmを使用している場合(前に戻って古いコードベースをサポートする必要がある場合に最適です!):rvm ruby​​gems 1.5.3
tardate

35

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

require 'thread'

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


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

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'を追加しても問題は解決しませんでした。/vendor/rails/activesupport/lib/active_support.rbにrequire 'thread'を追加すると問題は解決しました。


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を使用して、正しいフォルダーにいることを再確認してください。ターミナルのタブの配列を開いていて、そのうちの1つが別のディレクトリにありました。「rails console」と入力すると、デフォルトのレールディストリビューションが2.3.xであるため、エラーが発生しました。

私は自分の側でエラーに気づき、正しいディレクトリにcdしました。残りは.rvmrcファイルが行いました。

RVMはありません Gitのよう。gitでは、1つのシェルでブランチを変更すると、どこでもブランチが変更されます。問題のファイルを文字通り書き換えます。一方、RVMはシェル変数を設定するだけなので、開く新しいシェルごとに設定する必要があります。

.rvmrcに慣れていない場合は、その名前のファイルを任意のディレクトリに置くことができます。そのディレクトリに移動するたびに、rvmはそれを取得し、そこに指定されたバージョン/ gemsetを使用します。次に.rvmrcファイルの例を示します。

rvm use 1.9.2@turtles

これにより、gemset「カメ」を使用して、RVMコレクション内のルビー1.9.2の最新バージョンに切り替わります。これで、ターミナルで100個のタブを開いて(結局のところ)、タブが指しているルビのバージョンを気にする必要がなくなります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.