2013-03-18 1 views
1

우리는 보관을 위해 테이블 ​​데이터를 다른 데이터베이스로 옮깁니다. 따라서 사용자가 Main DB에서 마이그레이션을 추가 할 때 보관 된 DB의 테이블에 대해 동일한 마이그레이션을 수행하도록 알려주는 기본 메시지를 표시하려고합니다. 마이그레이션 할 때 수동으로 메시지를 추가 할 필요없이 어떻게 할 수 있습니까?레일즈 마이그레이션을 실행하는 동안 어떻게 기본 메시지를 표시 할 수 있습니까?

+0

왜 'rake db : migrate' 정의를 사용자 정의하여 두 데이터베이스에서 동시에 이전을 수행하지 않습니까? 그것을하는 방법에 대한 힌트는 http://stackoverflow.com/a/6379712/429758을 참조하십시오. –

+0

우리는 테이블을 현명하게 움직이고 있습니다. 따라서 모든 테이블이 두 DB에 모두있는 것은 아닙니다. –

답변

1

Prakash는 우아한 솔루션을 제안합니다. 그러나 원래의 질문은 내가 믿는 메시지를 추가하기 위해 기본 작업을 무시하는 것에 관한 것이 었습니다.

어쩌면 이런 식으로 시도해보십시오. 의례 : http://metaskills.net/2010/05/26/the-alias_method_chain-of-rake-override-rake-task/

Rake::TaskManager.class_eval do 
    def alias_task(fq_name) 
    new_name = "#{fq_name}:original" 
    @tasks[new_name] = @tasks.delete(fq_name) 
    end 
end 

def alias_task(fq_name) 
    Rake.application.alias_task(fq_name) 
end 

def override_task(*args, &block) 
    name, params, deps = Rake.application.resolve_args(args.dup) 
    fq_name = Rake.application.instance_variable_get(:@scope).dup.push(name).join(':') 
    alias_task(fq_name) 
    Rake::Task.define_task(*args, &block) 
end 

지금 당신이 갈퀴 DB를 대체 할 수 있습니다 : 다음과 같이 이동한다.

namespace :db do 
    override_task :migrate => :environment do 
     # Your message here 
     # To invoke the original task add ":original" to its name 
     Rake::Task["db:migrate:original"].execute 
     ... 
    end 
end 
+0

사실, ActiveRecord :: Migration 클래스를 재정의 할 생각 이었지만 올바른 방법인지는 확실하지 않았습니다. –