Неинициализированная константа ActiveSupport:: Зависимости:: Mutex (NameError)

Когда я хочу создать проект 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

Что пошло не так? Как мне его исправить?

Ответ 1

Это несовместимость между Rails 2.3.8 и последними версиями RubyGems. Обновите последнюю версию 2.3 (2.3.11 на сегодняшний день).

Ответ 2

Если вы не можете выполнить обновление до 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
...

Ответ 3

Я смог исправить это, понизив 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

Ответ 4

Вероятно, вы также можете обойти эту проблему, требуя "thread" в своем приложении как таковой:

require 'thread'

В соответствии с примечаниями к выпуску RubyGems 1.6.0 .

Ответ 5

Если вы хотите сохранить свою версию такой же, как рельсы, будет 2.3.8, а версия gem будет последней. Вы можете использовать это решение Последний камень с Rails2.x. в этом некоторые изменения в файле 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

Ответ 6

Я столкнулся с этой проблемой во многих случаях, когда попытался запустить старый проект rails 2.3.5 после работы с рельсами 3 > . В моем случае, чтобы решить проблему, я должен сделать обновление rubygems до версии 1.4.2, это:

sudo gem update --system 1.4.2

Ответ 7

Если вы используете Radiant CMS, просто добавьте

require 'thread'

в начало config/boot.rb.

(Kudos к ответам Aaron и nathanvda.)

Ответ 8

Попробуйте обновить версию Ruby on Rails до версии 3.0:

gem install rails --version 3.0.5

или v2.3.11:

gem install rails --version 2.3.11

Если это не новый проект, вам необходимо будет обновить приложение. Если это был новый проект, просто удалите каталог, в который вы его создали, и снова создайте новый проект.

Ответ 9

Как уже упоминалось, это происходит при использовании RubyGems 1.6.0 с версией Ruby on Rails раньше, чем версия 3. Мое приложение использует Ruby on Rails 2.3.3, выпущенный в /vendor проекта.

Без сомнения, обновление Ruby on Rails до более новой версии 2.3.X также может устранить эту проблему. Однако эта проблема не позволяет вам запускать Rake, чтобы освободить Ruby on Rails и обновить его.

Добавление require 'thread' к вершине environment.rb не устранило проблему для меня. Для добавления проблемы требуется "thread" в/vendor/rails/activesupport/lib/active_support.rb.

Ответ 10

обновить rubygems

gem update --system

Ответ 11

Я отправляю свое решение для других душ, лишенных сна:

Если вы используете RVM, дважды проверьте, что вы находитесь в правильной папке, используя правильную рубиновую версию и gemset. У меня было открыто множество вкладок терминалов, и один из них был в другом каталоге. набрав "rails console", появилась ошибка, потому что мой дистрибутив по умолчанию - 2.3.x.

Я заметил ошибку с моей стороны, cd'd в правильном каталоге, и мой .rvmrc файл сделал все остальное.

RVM не похож на Git. В git изменение ветвей в одной оболочке меняет его всюду. Он буквально переписывает файлы, о которых идет речь. RVM, с другой стороны, просто устанавливает переменные оболочки и должен быть установлен для каждой новой оболочки, которую вы открываете.

Если вы не знакомы с .rvmrc, вы можете поместить файл с этим именем в любой каталог, а rvm заберет его и будет использовать указанную в нем версию /gemset при каждом изменении в этом каталоге. Здесь пример файла .rvmrc:

rvm use [email protected]

Это позволит перейти к последней версии ruby ​​1.9.2 в вашей коллекции RVM, используя gemset "черепахи". Теперь вы можете открыть сотню вкладок в терминале (как я это делаю) и никогда не беспокоиться о рубиновой версии, на которую она указывает.