我编写了一个自定义数据库适配器,它在 Rails 服务器运行时可以正常有效地工作。我现在想添加用于创建、删除和迁移数据库的常用 rake 任务定义。
我想实现:
db:[drop|create|migrate]
如何将这些定义与我的 gem 打包,以便它们覆盖任何使用 gem 的人的默认定义?
我查看了其他适配器的来源,但所有 rake 任务逻辑似乎都被烘焙到 active_record 本身,每个任务只是打开适配器名称。
我编写了一个自定义数据库适配器,它在 Rails 服务器运行时可以正常有效地工作。我现在想添加用于创建、删除和迁移数据库的常用 rake 任务定义。
我想实现:
db:[drop|create|migrate]
如何将这些定义与我的 gem 打包,以便它们覆盖任何使用 gem 的人的默认定义?
我查看了其他适配器的来源,但所有 rake 任务逻辑似乎都被烘焙到 active_record 本身,每个任务只是打开适配器名称。
这可以通过:
# 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
如果要将任务添加到现有的 rake 任务,请使用enhance
.
Rake::Task['db:create'].enhance do
Rake::Task['db:after_create'].invoke
end