Проблемы с Ruby on Rails и Rake: неинициализированная константа Rake :: DSL

У меня очень неприятная проблема: Рейк глуп.

Вот как возникает проблема:

$ rails new test_app $ rails generate scaffold new_scaffold field1:string field2:text 

Оба они работают нормально, но тогда, когда я это делаю,

 $ rake db:migrate 

Я получаю следующую ошибку.

 (in /home/mikhail/test_app) rake aborted! uninitialized constant Rake::DSL /usr/lib/ruby/1.9.1/rake.rb:2482:in `const_missing' /usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:8:in `' /usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:6:in `' /usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:3:in `' /usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `require' /usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `require' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `load' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `block in ' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `each' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `require' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `initialize_tasks' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:139:in `load_tasks' /usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:77:in `method_missing' /home/mikhail/test_app/Rakefile:7:in `' /usr/lib/ruby/1.9.1/rake.rb:2373:in `load' /usr/lib/ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile' /usr/lib/ruby/1.9.1/rake.rb:2007:in `block in load_rakefile' /usr/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling' /usr/lib/ruby/1.9.1/rake.rb:2006:in `load_rakefile' /usr/lib/ruby/1.9.1/rake.rb:1991:in `run' /usr/bin/rake:31:in `' 

Я искал Интернет для подобных / одинаковых ошибок, и люди их имели. Просто никто никогда не решил проблему!

Как исправить эту проблему?

Твит из DHH ранее. Rake .9.0 breaks Rails и несколько других вещей, вам необходимо:

 gem "rake", "0.8.7" 

в вашем Gemfile.

Я сделал некоторые исследования сразу после моего предыдущего ответа (извините, я должен сделать перед этим).

Все проблемы решены с помощью Rake gem 0.9.2. Я выполнил следующие шаги:

  • Я gem install rake -v=0.9.2 (у меня был жрец 0.9.1)
  • удалил 0.9.1 с помощью gem uninstall rake -v=0.9.1
  • обновлено с bundle update
  • то db:migrate отобразило предупреждение, WARNING: Global access to Rake DSL methods is deprecated. Please.... WARNING: Global access to Rake DSL methods is deprecated. Please....

    Он был решен, добавив следующее в файл Rake.

     module ::YourApplicationName class Application include Rake::DSL end end 
  • Я пропустил module ::RakeFileUtils extend Rake::FileUtilsExtend полученный от @databyte.

Это означает, что Rake Gem 0.9.2 отлично работает!

Пройдя через главу 2 руководства по навигации (demo_app) и столкнувшись с этой проблемой. Я попробовал все остальные ответы, перечисленные здесь, но не смог заставить его работать, пока не сделал это:

Поместите это в свой Rakefile выше, чтобы требовать «рейк»:

 require 'rake/dsl_definition' 

через Как исправить неинициализированную постоянную проблему Rake :: DSL на Heroku?

Я также подтвердил и нажал все файлы в Github и Heroku.

Все, что мне нужно было сделать, это использовать:

 gem install rake 

У меня уже была версия 0.9.2, просто нужно было установить.

Переустановите грабли и он должен работать нормально:

 gem uninstall rake -v=0.9.2 gem install rake -v=0.9.2 

Если нет, укажите версию «0.8.7» в Gemfile.

Если не использовать Bundler:

 sudo gem install rake -v 0.8.7 sudo gem uninstall rake 

Затем выберите удаление 0.9.0.

Если вы, как я, вы застряли на рейке 0.8.7, и вы используете Rails 3.2.x, тогда railties добавляет требование для Rake :: DSL

Чтобы решить эту проблему, в верхней части вашего Rakefile вы должны добавить:

 module Rake module DSL end end 

Я решил ту же проблему со следующими шагами:

В Gemfile:

 gem 'rake', '0.9.2' 

Затем запустили это на консоли:

 sudo bundle update rake 

Затем добавили следующие строки в Rakefile:

 require 'rake/dsl_definition' include Rake::DSL 

Rails 3.1.rc1 обновлен. Для собственных Rakefiles вы можете добавить это перед вызовом load_tasks.

 module ::YourApplicationName class Application include Rake::DSL end end module ::RakeFileUtils extend Rake::FileUtilsExt end 

https://gist.github.com/4cd2bbe68f98f2f0249f

UPDATE: Также заметил, что здесь уже ответили: Неопределенный метод «задача» с использованием Rake 0.9.0

У меня была такая же проблема, и мне пришлось использовать грабли 0.8.7 вместо 0.9.0.

Я пользователь Windows XP, и у меня была такая же проблема.

Я ввел gem “rake”, “0.8.7” в gemfile, а затем набрал из командной строки следующее.

 bundle update rake 

Это устранило мою проблему.

  1. Перейти к вашему пути к проекту
  2. bundle install --path=vendor/bundle
  3. Тип bundle exec rake db:migrate

Чтобы запустить набор типов серверов bundle exec rails s . Используйте bundle exec, и вы будете уверены, что используете свой gem (требуемую версию) для своего проекта. Также я бы рекомендовал вам добавить vendor/bundle в .gitignore если вы используете git и создаете псевдоним для bundle exec . Если вы используете zsh вы можете следовать этому подходу

То же, что и Бранстар выше – спасибо Бранстар!

  • ОС: Windows Vista
  • Уровень: Совершенно новый для Ruby on Rails
  • У меня уже установлен Ruby 1.9.2

Я выполнил инструкции в Running Rails 3 в Windows .

Все работало до части «rake db: migrate», которая давала мне тот же результат, что и исходный пост.

Я побежал:

 gem install rake 

Я снова побежал:

 rake db:migrate 

Затем я смог запустить сервер Ruby on Rails и имел все на своем месте.

Еще раз спасибо Branstar 🙂

Я чувствую к вам (mikhailvs), это действительно расстраивает. Я сошел с ума почти на целый день. Я даже удалил Ruby и все его зависимые файлы и выключил мой компьютер, но у меня все еще была та же проблема.

То, что я получил от сообщения об ошибке, – проблема с Rake 0.9.2. Похоже, он не был полностью установлен. Поэтому мне пришлось переустановить gem install rake -v=0.9.2

Я не был уверен, что у меня установлен rake -v0.9.1. Поэтому, чтобы убедиться, что я в безопасности, я попытался удалить эту старую версию с помощью gem uninstall rake -v=0.9.1 . Но я показал сообщение об ошибке

 ERROR: While executing gem ... (Gem::InstallError) cannot uninstall, check `gem list -d rake` 

Хорошо, поэтому я проверил все каталоги Rake на моем ПК и обнаружил, что у меня только Rake 0.9.2. Затем, чтобы проверить, все ли в порядке, я мигрировал с rake db:migrate . И это сработало 🙂

Я думаю, что у меня не было Rake 0.9.1, потому что я очистил Ruby ( rubyinstaller-1.9.2-p180 – в моей системе Windows 7) и все драгоценные камни. В то же время Rake 0.9.2 не был полностью установлен.

Деинсталляция с помощью «gem uninstall rake» работала для меня, у меня было установлено 2 версии, поэтому я шутил, сделал чистую переустановку.

«rake db: create» , чтобы firebase database существовала, а затем «rake db: migrate», чтобы запечатать сделку.

У меня была такая же проблема с использованием Rake 0.9.2.2. Я решил эту проблему, используя bundle exec.

Для Rails 2.3 редактирование lib/tasks/rspec.rake как в этом lib/tasks/rspec.rake работало для меня:

https://github.com/dchelimsky/rspec-rails/pull/11/files

Установить рейк 0.8.7 и удалить 0.9.2.2

 $ gem install rake -v 0.8.7 $ gem uninstall rake -v 0.9.2.2 

Теперь используйте

 $ bundle exec rake db:migrate 

я думаю, это поможет вам;)

Бег

 bundle exec rake db:migrate 

меня устраивает.

Давайте будем гением компьютера.