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

247

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

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

  • 0
    Можете ли вы опубликовать вывод gem --version ?
Теги:
rubygems
compatibility

11 ответов

131
Лучший ответ

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

221

Если вы не можете выполнить обновление до 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
  • 12
    Добавление его в boot.rb должно быть правильным ответом.
Показать ещё 6 комментариев
158

Я смог исправить это, понизив 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
  • 2
    Возникла проблема с запуском приложения 2.3.5 rails после наличия rails 3 + Rubygems 1.6+. Это решило это, спасибо.
  • 0
    Еще работает, спасибо
Показать ещё 8 комментариев
35

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

require 'thread'

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

24

Если вы хотите сохранить свою версию такой же, как рельсы, будет 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
  • 4
    Спасибо, это единственное решение, которое сделало это для меня.
11

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

sudo gem update --system 1.4.2
  • 0
    Это лучшее решение для нас, так как версия rails не может измениться, слишком много связано с ее обновлением, но изменение версии gem, легко и просто!
6

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

require 'thread'

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

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

3

Как уже упоминалось, это происходит при использовании 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.

3

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

gem install rails --version 3.0.5

или v2.3.11:

gem install rails --version 2.3.11

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

1

обновить rubygems

gem update --system

0

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

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

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

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

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

rvm use 1.9.2@turtles

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню