当前位置 : 主页 > 编程语言 > ruby >

ruby-on-rails – 覆盖rails的默认rake任务

来源:互联网 收集:自由互联 发布时间:2021-06-23
我有一个Rails 2.2项目,我想在其中覆盖rake db:test:prepare任务的功能.我认为这会起作用,但它没有: #lib/tasks/db.rakenamespace :db do namespace :test do desc "Overridden version of rails' standard db:test:prep
我有一个Rails 2.2项目,我想在其中覆盖rake db:test:prepare任务的功能.我认为这会起作用,但它没有:

#lib/tasks/db.rake
namespace :db do
  namespace :test do
    desc "Overridden version of rails' standard db:test:prepare task since the schema dump used in that can't handle DB enums"  
    task :prepare => [:environment] do
      puts "doing db:structure:dump"
      Rake::Task['db:structure:dump'].invoke
      puts "doing db:test:clone_structure"
      Rake::Task['db:test:clone_structure'].invoke
    end   
  end
end

我得到了标准任务的行为.如果我将任务的名称更改为:prepare2然后执行rake db:test:prepare2,那么它可以正常工作.我从中得出的自然结论是,我的rake任务在内置的Rails之前被定义,因此我的标准被覆盖:准备任务.

任何人都可以看到我如何解决这个问题?我宁愿覆盖它而不是使用新任务.谢谢,最多

如果定义已存在的rake任务,则会将其执行附加到原始任务的执行中;这两项任务都将被执行.

如果要重新定义任务,则需要先清除原始任务:

Rake::Task["db:test:prepare"].clear

注意一旦任务在rake中执行,即使再次调用它也不会再次执行,这也很有用.这是设计的,但您可以在任务上调用.reset以允许它再次运行.

网友评论