우리는 보관을 위해 테이블 데이터를 다른 데이터베이스로 옮깁니다. 따라서 사용자가 Main DB에서 마이그레이션을 추가 할 때 보관 된 DB의 테이블에 대해 동일한 마이그레이션을 수행하도록 알려주는 기본 메시지를 표시하려고합니다. 마이그레이션 할 때 수동으로 메시지를 추가 할 필요없이 어떻게 할 수 있습니까?레일즈 마이그레이션을 실행하는 동안 어떻게 기본 메시지를 표시 할 수 있습니까?
1
A
답변
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 클래스를 재정의 할 생각 이었지만 올바른 방법인지는 확실하지 않았습니다. –
왜 'rake db : migrate' 정의를 사용자 정의하여 두 데이터베이스에서 동시에 이전을 수행하지 않습니까? 그것을하는 방법에 대한 힌트는 http://stackoverflow.com/a/6379712/429758을 참조하십시오. –
우리는 테이블을 현명하게 움직이고 있습니다. 따라서 모든 테이블이 두 DB에 모두있는 것은 아닙니다. –