Rails 3.0 и Ruby 1.9.2rc: команды Rake возвращают "уже инициализированную константу" и уровень слишком глубоких ошибок стека. Есть идеи

Я пытаюсь запустить Rails 3 beta 4 и Ruby 1.9.2rc на Ubuntu 10.04. Сначала он работал, но после выполнения первого пакета install/package теперь я получаю следующие ошибки во всех проектах 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

Ответ 1

Я боюсь, что более простое решение выполняет эту команду вместо rake db: migrate

bundle exec rake db:migrate

Ответ 2

Я тоже сталкивался с этой проблемой. Это, похоже, не связано с конкретными версиями рельсов или рубинов, которые вы упоминаете, которые отличаются от тех, которые я использую (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

EDIT:

Думая об этом немного больше, я не уверен, что это обязательно лучший способ решить эту проблему. Вы можете дать совет Hiral Desai и некоторые другие ответы, прежде чем прибегать к такому подходу, поскольку этот изменяет среду.

Ответ 3

В соответствии с предыдущим сообщением от Eric W. установлена ​​переменная среды RUBYOPT. Если вы хотите выйти из новой оболочки bash, которая открывается "bundle exec bash", просто скопируйте линию окружения RUBYOPT, выйдите из оболочки и введите "export RUBYOPT =" ARGS, КОТОРЫЕ ВЫ КОПИРОВАЛИ ИЗ ПРЕДЫДУЩЕЙ СРЕДЫ ",

Примечание: это работает с 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

Ответ 4

bundle exec bash работает для меня

Ответ 5

Мне удалось решить эту проблему, понизив мою установку rubygem с 1,8.10 до 1.7.2.

gem update --system 1.7.2

Ответ 6

Похож на странный рекурсивный require.

Вы пытались удалить все версии rake и переустановить его? Есть ошибка в 1.9.2rc влияющая на загрузку gem, так что может быть? Я не пристально смотрел на него, поскольку многие люди уже внимательно следят за ним...

Примечание. 1.9.1 - это версия API, поэтому она верна.

Ответ 7

У меня была папка .bundler в корневом каталоге, которая была противоречивой. Удаление его сделало это для меня.

rm -rf ~/.bundler

Ответ 8

Я тоже сталкивался с этой проблемой после обновления rubygem (1.8.10) и bundler (1.0.18)

Я решил обновить rake до 0.9.2

Ответ 9

Только что получил такую ​​ошибку из-за удаленного .rvmrc

Поэтому, пожалуйста, убедитесь, что вы используете рейк в правильной среде;)

Ответ 10

Если у вас установлен RVM, эта проблема может возникнуть после обновления rubygems до версии 1.8.15. Проблема заключалась в том, что у меня был рейк, установленный в глобальном gemset и моем проекте gemset. Решение состояло в том, чтобы иметь только одну установку рейка. Чтобы удалить его из проекта gemset: 1. cd к проекту 2. gem uninstall rake

Ответ 11

Другое возможное решение дается в http://rubyist-journal.com/2011/07/29/howto-fix-rake-0-9-2-to-work-with-ruby-1-9-2-under-rvm/

Кажется, сводится к тому, что один и тот же громоотвод установлен как в вашем каталоге персональных жемчужин, так и в общесистемной области. Удаление одной проблемы устраняет проблему.

Ответ 12

Это может произойти, если у вас есть грабли gem, установленные как в вашем репо rvm gemset, так и в глобальном.

Ответ 13

Обновить до последней версии Rails. Итак, если вы в 4.2, обновите = > 4.2.latest.