Глобальный доступ к методам Rake DSL устарел


86

Я работаю с учебником Ruby on Rails 3 и набираю в командной строке следующее:

rake db:migrate

что привело к следующему предупреждению.

WARNING: Global access to Rake DSL methods is deprecated.  Please Include
    ...  Rake::DSL into classes and modules which use the Rake DSL methods.

WARNING: DSL method DemoApp::Application#task called at /Users/imac/.rvm/gems/ruby-1.9.2-p180@rails3tutorial/gems/railties-3.0.7/lib/rails/application.rb:215:in `initialize_tasks'

Я не знаю, что с этим делать и как с этим работать. Я не знаю другой команды для Rake.

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

Ответы:


64

Я нашел это в вопросе о переполнении стека Проблемы Ruby on Rails и Rake: неинициализированная константа Rake :: DSL . Это относится к твиту @DHH.

Поместите следующее в свой Gemfile

gem "rake", "0.8.7"

Вы можете увидеть что-то вроде

rake aborted!
You have already activated Rake 0.9.1 ...

В моем каталоге все еще была копия Rake 0.9.1, поэтому я удалил ее.

Вы можете «удалить» Rake 0.9.1, выполнив следующую команду:

gem uninstall rake -v=0.9.1

Если у вас установлено несколько версий гема, вам будет предложено выбрать версию.

После очистки версии 0.9.1 я запустил

bundle update rake

и наконец смог создать свои файлы базы данных. Я использовал rake db:create, но он rake db:migrateтоже должен работать .

Я надеюсь, что это помогает.


5
У меня это не сработало. Мне пришлось удалить rake 0.9.1> gem uninstall rake -v = 0.9.1, а затем> обновление пакета Спасибо, Антонио

1
Я согласен с Антонио - когда я сказал удалить rake 0.9.1, я имел в виду через использование gem uninstall rake -v=0.9.1. Моя ошибка в том, что я не прояснил это. Спасибо за разъяснение Антонио! Ура, Брайан
Брайан Брейн

13
Я не думаю, что целесообразно сознательно использовать старые библиотеки, когда можно заставить работать более новую, см. Комментарий ниже.
Smar

2
Более простое решение предложено NPatel ниже. Просто добавьте одну строчку в Rakefile.
Слободан Ковачевич

С этим разрешением мне не повезло. Та же ошибка возникла после удаления rake 0.9.1 или 0.9.2 и последующего обновления пакета.
Marc

111

Добавление include Rake::DSLв Rakefile до вызова приложений load_tasks также сработало.

Таким образом, в случае вышеупомянутого пользователя перед DemoApp::Application.load_tasksфайлом Rakefile.


Спасибо. Исправлено мое «ПРЕДУПРЕЖДЕНИЕ: глобальный доступ к методам Rake DSL устарел». проблема.
Слободан Ковачевич

Это правильный способ решить эту проблему?
Marc

2
@Marc, в настоящее время это единственное известное мне исправление без обновления до rails 3.0.8 или выше. Эта проблема решена в этом выпуске: github.com/rails/rails/commit/… . Если вы найдете лучшее решение, дайте мне знать. Кроме того, согласно предупреждению, я бы подумал, что это правильное исправление.
Patelify

1
Это решение, которое я выбрал. Я бы предпочел просто добавить строчку, чем играть в игры, с какой версией Rake работает.
jaydel

2
У меня это сработало с 1.9.2 и Rails 3.0.7 с Rake 0.9.2
Стивен

5

У меня была такая же проблема в Windows с установщиком. Ruby 1.9.2 и Rails 3.0.9. Вот что я сделал:

bundle update rake
bundle show rake

После этого я запустил rake 0.9.2.

Затем я обновил Rakefile в корневой папке приложения следующим образом:

require File.expand_path('../config/application', __FILE__)
require 'rake'
# If you named your application something other than SampleApp, change that below
module ::SampleApp
    class Application
        include Rake::DSL
    end
end

module ::RakeFileUtils
    extend Rake::FileUtilsExt
end

SampleApp::Application.load_tasks

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


1
И чтобы заставить heroku rake db:migrateкоманду работать, мне также пришлось добавить require 'rake/dsl_definition'в rakefile (над строкой require 'rake').
LikeMaBell 01

У меня все это работает, но в этом нет необходимости. Предложение NPatel прекрасно справилось с этим.
Скотт Суизи

0

Если вы видите это в более поздних версиях Rails (например, 3. +), вы также можете проверить, чиста ли ваша среда, используя RVM http://beginrescueend.com/ и создав определенные ruby ​​и gemset для ваших проектов.

Используйте файл .rvmrc для каждого проекта, это гарантирует, что вы не добавите старые системные гемы в свои проекты. Которая укусила меня раньше.

Это избавляет от необходимости копаться с сгенерированными Rakefiles и т.п.


0

bundle exec rake db: migrate решит проблемы с вашей версией ruby


Это работает только в том случае, если у вас есть рабочая версия rake в вашем Gemfile, и при вводе «rake» используется другая версия, установленная в вашем PATH
RyanHennig
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.