Глобальный доступ к методам 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