Ответ 1
Это несовместимость между Rails 2.3.8 и последними версиями RubyGems. Обновите последнюю версию 2.3 (2.3.11 на сегодняшний день).
Когда я хочу создать проект 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
Что пошло не так? Как мне его исправить?
Это несовместимость между Rails 2.3.8 и последними версиями RubyGems. Обновите последнюю версию 2.3 (2.3.11 на сегодняшний день).
Если вы не можете выполнить обновление до 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
...
Я смог исправить это, понизив 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
Вероятно, вы также можете обойти эту проблему, требуя "thread" в своем приложении как таковой:
require 'thread'
В соответствии с примечаниями к выпуску RubyGems 1.6.0 .
Если вы хотите сохранить свою версию такой же, как рельсы, будет 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
Я столкнулся с этой проблемой во многих случаях, когда попытался запустить старый проект rails 2.3.5 после работы с рельсами 3 > . В моем случае, чтобы решить проблему, я должен сделать обновление rubygems до версии 1.4.2, это:
sudo gem update --system 1.4.2
Если вы используете Radiant CMS, просто добавьте
require 'thread'
в начало config/boot.rb
.
(Kudos к ответам Aaron и nathanvda.)
Попробуйте обновить версию Ruby on Rails до версии 3.0:
gem install rails --version 3.0.5
или v2.3.11:
gem install rails --version 2.3.11
Если это не новый проект, вам необходимо будет обновить приложение. Если это был новый проект, просто удалите каталог, в который вы его создали, и снова создайте новый проект.
Как уже упоминалось, это происходит при использовании 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.
обновить rubygems
gem update --system
Я отправляю свое решение для других душ, лишенных сна:
Если вы используете 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 "черепахи". Теперь вы можете открыть сотню вкладок в терминале (как я это делаю) и никогда не беспокоиться о рубиновой версии, на которую она указывает.