Глобальний доступ до методів 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'

Я не знаю, що з цим робити чи як з цим працювати. Я не знаю жодної іншої команди для Рейка.

Як я можу вирішити цю проблему?

Відповіді:


64

Я знайшов це у запитанні щодо переповнення стеку Ruby on Rails та Rake problems: 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

Якщо у вас встановлено кілька версій самоцвіту, вам буде запропоновано вибрати версію.

Після очищення 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
Я згоден з Антоніо - коли я сказав видалити рейк 0.9.1, я мав на увазі використання gem uninstall rake -v=0.9.1. Моя помилка, що я не дав зрозуміти. Дякую за роз'яснення, Антоніо! Ура, Брайан
Брайан Бруйн

13
Я не думаю, що добре навмисно використовувати старі бібліотеки, коли нові можуть працювати, бачачи коментар нижче.
Smar

2
Більш простим рішенням є запропоноване NPatel нижче. Просто додайте один рядок до Rakefile.
Слободан Ковачевич

Мені не пощастило з цією резолюцією. Він все одно придумав ту саму помилку після видалення rake 0.9.1 або 0.9.2, а потім запуску оновлення пакета.
Марк

111

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

Так у вищезазначеному випадку користувача перед DemoApp::Application.load_tasksу Rakefile.


Дякую. Виправлено моє "ПОПЕРЕДЖЕННЯ: Глобальний доступ до методів Rake DSL застарілий". проблема.
Слободан Ковачевич

Це правильний спосіб вирішити цю проблему?
Марк

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

Після цього я запустив граблі 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 (над необхідним рядком 'rake').
LikeMaBell

Все це працює для мене, але не потрібно. Пропозиція NPatel справилася з цим чудово.
Скотт Сузі

0

Якщо ви бачите це в пізніших версіях Rails (наприклад, 3. +), можливо, ви також захочете перевірити чистість вашого середовища, використовуючи RVM http://beginrescueend.com/ та створюючи конкретний ruby ​​& gemset для ваших проектів.

Використовуйте файл .rvmrc для кожного проекту, це гарантуватиме, що у ваші проекти не потраплятимуть старші системні камені. Що мене і раніше кусало.

Це запобігає необхідності мавпувати згенерованими Rakefiles тощо.


0

bundle exec rake db: migrate вирішить ваші проблеми з рубіновою версією


Це працює лише в тому випадку, якщо у вашому Gemfile є робоча версія rake, а при введенні "rake" використовується інша версія, встановлена ​​у вашому PATH
RyanHennig
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.