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
何が間違っているのですか?どうすれば修正できますか?
これは、Rails 2.3.8とRubyGemsの最新バージョンとの非互換性です。最新の2.3バージョン(今日の2.3.11)にアップグレードします。
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
...
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
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
Rails 3>で作業した後、古いRails 2.3.5プロジェクトを開始しようとすると、多くの場合にこの問題に直面しました。私の場合、問題を解決するには、バージョン1.4.2にrubygemsを更新する必要があります。これは次のとおりです。
Sudo gem update --system 1.4.2
Radiant CMSを使用している場合は、追加するだけです
require 'thread'
config/boot.rb
の先頭へ。
(アーロンとナタンブダの反応に対する称賛。)
RubyバージョンのRailsバージョンをv3.0.5に更新してみてください。
gem install Rails --version 3.0.5
またはv2.3.11:
gem install Rails --version 2.3.11
これが新しいプロジェクトでない場合は、それに応じてアプリケーションをアップグレードする必要があります。新しいプロジェクトの場合は、作成したディレクトリを削除して、新しいプロジェクトを再度作成します。
前述のように、これは、バージョン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'を追加すると、問題は修正されました。
rubygemsを更新する
gem update --system