Как переопределить задачи rake для настраиваемого адаптера базы данных? - PullRequest
6 голосов
/ 01 июня 2011

Я написал специальный адаптер базы данных, который работает правильно и эффективно, когда работает сервер rails.Теперь я хотел бы добавить обычные определения задач rake для создания, удаления и переноса базы данных.

Я хотел бы реализовать:

db:[drop|create|migrate]

Как мне упаковать эти определения в мой драгоценный камень, чтобы они переопределяли значения по умолчанию для всех, кто использует этот драгоценный камень?

Я просмотрел источник других адаптеров, но вся логика задач rake, похоже, запекается в самой active_record, каждая задача просто включает имя адаптера.

Ответы [ 2 ]

12 голосов
/ 17 июня 2011

Это возможно с:

# somewhere in your gem's tasks
Rake::Task['db:create'].clear

# then re-define
namespace 'db' do
  task 'create' do
    # ...
  end
end

Когда Take::Task#[] не может решить задачу , это будет fail.Если ваши задачи иногда существуют, вы можете:

task_exists = Rake.application.tasks.any? { |t| t.name == 'db:create' }
Rake::Task['db:create'].clear if task_exists

Если вы хотите добавить задач к существующей грабли, используйте enhance.

Rake::Task['db:create'].enhance do
  Rake::Task['db:after_create'].invoke
end
3 голосов
/ 05 апреля 2014

Вы можете написать

Rake::Task['db:create'].clear

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

...