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

Я работаю над учебником по 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/[email protected]/gems/railties-3.0.7/lib/rails/application.rb:215:in `initialize_tasks'

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

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

Ответ 1

Я нашел это в вопросе Проблемы с Ruby on Rails и Rake: uninitialized constant 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

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

После очистки 0,9,1 я побежал

bundle update rake

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

Надеюсь, это поможет.

Ответ 2

Добавление include Rake::DSL в Rakefile до того, как были вызваны приложения load_tasks, также работал у меня.

Итак, в приведенном выше примере пользователя перед DemoApp::Application.load_tasks в Rakefile.

Ответ 3

У меня была такая же проблема с 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

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

Ответ 4

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

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

Это предотвращает возможность обезьяны с генерируемыми Rakefiles и т.д.

Ответ 5

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