Проблемы с Ruby on Rails и Rake: неинициализированная константа Rake :: DSL - PullRequest
190 голосов
/ 22 мая 2011

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

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

$ 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>'

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

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

Ответы [ 19 ]

193 голосов
/ 22 мая 2011

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

gem "rake", "0.8.7"

в вашем Gemfile.

72 голосов
/ 08 июня 2011

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

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

54 голосов
/ 14 июля 2011

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

Поместите это в свой рейкфайл выше, для этого требуется 'rake':

require 'rake/dsl_definition'

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

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

25 голосов
/ 05 июля 2011

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

gem install rake

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

19 голосов
/ 11 сентября 2011

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

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

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

10 голосов
/ 23 мая 2011

Если не используется Bundler:

sudo gem install rake -v 0.8.7
sudo gem uninstall rake

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

8 голосов
/ 18 мая 2012

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

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

module Rake
  module DSL
  end
end
7 голосов
/ 10 августа 2011

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

В Gemfile:

gem 'rake', '0.9.2'

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

sudo bundle update rake

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

require 'rake/dsl_definition'
include Rake::DSL
6 голосов
/ 22 мая 2011

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

module ::YourApplicationName
  class Application
    include Rake::DSL
  end
end

module ::RakeFileUtils
  extend Rake::FileUtilsExt
end

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

ОБНОВЛЕНИЕ: Также заметил, что здесь уже есть ответ: Неопределенный метод 'task' с использованием Rake 0.9.0

4 голосов
/ 15 февраля 2012
  1. Перейти к пути вашего проекта
  2. Тип bundle install --path=vendor/bundle
  3. Тип bundle exec rake db:migrate

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...