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

У меня очень неприятная проблема: Rake не работает.

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

$ 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 `<class:TaskLib>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:6:in `<module:Rake>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:3:in `<top (required)>'
/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 `<top (required)>'
/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 `<top (required)>'
/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 <top (required)>'
/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 `<top (required)>'
/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 `<top (required)>'
/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 `<main>'

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

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

Ответ 1

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

gem "rake", "0.8.7"

в вашем Gemfile.

Ответ 2

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

Все проблемы решаются с помощью 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....

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

    module ::YourApplicationName  
      class Application
        include Rake::DSL
      end
    end
    
  • Я пропустил опцию module ::RakeFileUtils extend Rake::FileUtilsExtend, запрошенную @databyte.

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

Ответ 3

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

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

require 'rake/dsl_definition'

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

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

Ответ 4

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

gem install rake

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

Ответ 5

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

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

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

Ответ 6

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

sudo gem install rake -v 0.8.7
sudo gem uninstall rake

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

Ответ 7

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

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

module Rake
  module DSL
  end
end

Ответ 8

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

В Gemfile:

gem 'rake', '0.9.2'

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

sudo bundle update rake

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

require 'rake/dsl_definition'
include Rake::DSL

Ответ 10

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

Ответ 11

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

Я ввел gem "rake", "0.8.7" в gemfile, а затем ввел в командное окно следующее.

bundle update rake

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

Ответ 12

  • Перейти к пути к проекту
  • Тип bundle install --path=vendor/bundle
  • Тип bundle exec rake db:migrate

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

Ответ 13

То же, что и Branstar выше - спасибо Branstar!

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

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

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

Я побежал:

gem install rake

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

rake db:migrate

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

Еще раз спасибо Branstar: -)

Ответ 14

Я чувствую к вам (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 не был полностью установлен.

Ответ 15

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

"rake db: create" , чтобы убедиться, что база данных существует а затем "rake db: migrate" , чтобы запечатать сделку.

Ответ 16

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

Ответ 18

Установить грабли 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

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

Ответ 19

Запустить

bundle exec rake db:migrate

он работает для меня.