加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 01:25:20 所属栏目:百科 来源:网络整理
导读:我有一个Rails 2.2项目,我想在其中覆盖rake db:test:prepare任务的功能.我认为这会起作用,但它没有: #lib/tasks/db.rakenamespace :db do namespace :test do desc "Overridden version of rails' standard db:test:prepare task since the schema dump u
我有一个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以允许它再次运行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读