Rails 3.0 и Ruby 1.9.2rc: команды Rake возвращают "уже инициализированную константу" и слишком много ошибок на уровне стека. Есть идеи
Я пытаюсь запустить Rails 3 beta 4 и Ruby 1.9.2rc на Ubuntu 10.04. Первоначально это работало, но после выполнения моей первой установки / пакета пакета я теперь получаю следующие ошибки во всех проектах rails. Даже простой 'rails new testproject', сопровождаемый граблями, выводит сообщения об ошибках.
Короче я в тупик. Любая помощь в отношении того, что может быть причиной этого, будет очень признателен.
Единственное, что я заметил - что может или не может быть актуальным - это то, что каталог в файлах ~/.bundle - это ruby / 1.9.1. 1.9.1 не установлен на моей машине - только 1.9.2rc. ruby -v возвращает 1.9.2
(in /home/john/Websites/sandbox/testerino)
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:32: warning: already initialized constant RAKEVERSION
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake/alt_system.rb:32: warning: already initialized constant WINDOWS
WARNING: Possible conflict with Rake extension: String#ext already exists
WARNING: Possible conflict with Rake extension: String#pathmap already exists
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:404: warning: already initialized constant EMPTY_TASK_ARGS
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:452: warning: already initialized constant EMPTY
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:960: warning: already initialized constant RUBY_EXT
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:964: warning: already initialized constant RUBY
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1033: warning: already initialized constant LN_SUPPORTED
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1242: warning: already initialized constant ARRAY_METHODS
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1245: warning: already initialized constant MUST_DEFINE
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1249: warning: already initialized constant MUST_NOT_DEFINE
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1253: warning: already initialized constant SPECIAL_RETURN
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1259: warning: already initialized constant DELEGATING_METHODS
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1569: warning: already initialized constant DEFAULT_IGNORE_PATTERNS
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1575: warning: already initialized constant DEFAULT_IGNORE_PROCS
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1612: warning: already initialized constant FileList
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1638: warning: already initialized constant EARLY
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1968: warning: already initialized constant DEFAULT_RAKEFILES
rake aborted!
stack level too deep
13 ответов
Боюсь, что более простое решение - запустить эту команду вместо rake db:migrate.
bundle exec rake db:migrate
Я тоже столкнулся с этой проблемой. Похоже, это не связано с конкретными версиями rails или ruby, которые вы упоминаете, которые отличаются от тех, которые я использую (Rails 2.3.8, Rake 0.8.7, Ruby 1.9.1p378). Кажется, это связано с тем, что пакет и грабли не работают вместе.
Решение, которое сработало для меня, упоминается в конце этого билета на маяк. Вот короткая версия:
- Запустите "bundle exec bash"; посмотреть, работает ли грабли сейчас - если да,
- Убедитесь, что среды bash до и после одинаковы. Для этого обратитесь к команде env и, соответственно, измените ~/.bashrc или ~/.bash_profile.
Как только вы сделаете это, вы немного испортите упаковщик. На этом этапе вы должны очистить RUBYOPT, чтобы запустить команду bundle:
RUBYOPT= bundle install --relock
РЕДАКТИРОВАТЬ:
Подумав об этом немного больше, я не уверен, что это обязательно лучший способ решения этой конкретной проблемы. Вы можете дать совет Хирала Десаи и некоторые другие ответы, прежде чем прибегать к такому подходу, так как он меняет среду.
Согласно предыдущему сообщению от Эрика У. установлена переменная среды RUBYOPT. Если вы хотите выйти из новой оболочки bash, которая открывается с помощью "bundle exec bash", просто скопируйте строку среды RUBYOPT, выйдите из оболочки и введите "export RUBYOPT=" АРГИ, КОТОРЫЕ ВЫ КОПИРУЛИ ИЗ ПРЕДЫДУЩЕЙ СРЕДЫ "
Примечание: это работает с ruby 1.9.2p180 (2011-02-18, редакция 30909) [x86_64-darwin10.7.0], Rails 3.0.7, gem 1.8.0 и Rake 0.8.7
Я смог решить эту проблему, понизив мою установку rubygem с 1.8.10 до 1.7.2.
gem update --system 1.7.2
Похоже на странную рекурсивную require
,
Вы пытались удалить все версии rake
и переустановить его? В 1.9.2rc есть ошибка, влияющая на загрузку гемов, так что это может быть? Я не изучал это внимательно, так как многие уже внимательно следят за ним...
Примечание. 1.9.1 - это версия API, поэтому она верна.
Если у вас установлен RVM, эта проблема может начать возникать после обновления rubygems до 1.8.15. Проблема заключалась в том, что я установил rake в глобальный набор гемов и набор гемов моего проекта. Решением было иметь только одну установку граблей. Чтобы удалить его из проекта gemset: 1. перейдите в проект 2. gem uninstall rake
Другое возможное решение дано по адресу http://rubyist-journal.com/2011/07/29/howto-fix-rake-0-9-2-to-work-with-ruby-1-9-2-under-rvm/
Похоже, все сводится к тому, чтобы один и тот же rake gem был установлен как в вашем пользовательском каталоге gem, так и во всей системе. Удаление любого из них устраняет проблему.
Обновление до последней минорной версии Rails. Так что, если вы на 4.2, обновите => 4.2.latest.
Просто получил такую ошибку из-за удаленного.rvmrc
Поэтому, пожалуйста, убедитесь, что вы запускаете грабли в правильной среде;)
Это может произойти, если у вас установлен rake gem как в наборе rvm, так и в глобальном.
Я тоже столкнулся с этой проблемой после обновления rubygem (1.8.10) и bundler (1.0.18)
Я решил обновить грабли до 0.9.2
В моем корневом каталоге была папка.bundler, которая конфликтовала. Удаление это сделало это для меня.
rm -rf ~/.bundler