ruby-on-rails – 如何覆盖自定义数据库适配器的rake任务?

我编写了一个自定义数据库适配器,可以在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#[]无法解析任务it will fail时.
如果您的任务有时存在,您可能希望:

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

如果要将任务添加到现有rake任务,请使用增强功能.

Rake::Task['db:create'].enhance do
  Rake::Task['db:after_create'].invoke
end

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...