2010-04-13 2 views
38

파일에서 DB로 구성 데이터를로드하는 레이크 작업이 있는데, 마이그레이션 할 때 올바른 루비/레일 방법이 있습니까?마이그레이션 내에서 레이크 작업을 실행 하시겠습니까?

내 목표는없이 을 내 팀 DB의 CONFIGS을 작업을랄랄라을 실행 한 후 방송 한 동기화하는 것입니다

def self.up 
    change_table :fis_situacao_fiscal do |t| 
     t.remove :mostrar_endereco 
     t.rename :serie, :modelo 
    end 

    Faturamento::Cfop.destroy_all() 
    #perform rake here ! 
    end 

UPDATE 내가 지금하고 작동 방법 :

system('rake sistema:load_data file=faturamento/cfop') 

그리고 이것은 @ Ryan Bigg의 제안입니다. 예외적 인 경우 :

Rake::Task['rake sistema:load_data file=faturamento/cfop'].invoke() 

.

== AlterSituacaoFiscalModeloEndereco: migrating ==================== 
-- change_table(:fis_situacao_fiscal) 
    -> 0.0014s 

rake aborted! 
An error has occurred, this and all later migrations canceled: 

Don't know how to build task 'rake sistema:load_data file=faturamento/cfop' 

어디가 잘못 되었나요?

+2

왜 "rake"라는 단어를 전달하겠습니까? 그것없이 그것을 시도하십시오. 그것은 갈퀴 작업이라는 것을 알고 있습니다. – ryeguy

+0

@ Fabiano : 답변을 업데이트했습니다. –

답변

72

예 그렇게 할 수있는 방법이 있습니다 :

는 괄호 안에 레이크을 넣지 마십시오

Rake::Task['your_task'].invoke 

업데이트, 단지 이름 작업의. ENV['file']

+0

당신의 대답으로 업데이트를 만들었습니다. 더 도움이된다면 다행입니다. –

+1

"갈퀴"없이 시도하십시오. – ryeguy

+3

작업이 네임 스페이스에 있다면 어떻게 될까요? 나는'rake semi : seed [89]'('89_'로 시작하는 .rb 파일을 실행할 것입니다)로 실행할 수있는 시드 시스템을 가지고 있지만'Rake :: Task [ 'semi : seed [89] ']'마이그레이션 파일에서 시드 작업을 호출하는 방법에 대한 아이디어가 있습니까? – MrYoshiji

9
별도로

FILE=somefile.text rake some:other:task:that:calls:it 

이 당신의 작업에서 사용할 수를 호출 콘솔

FILE=somefile.text rake db:sistema:load_data 

에서

:이 작업을 실행할 때 당신은 ENV 변수를 설정해야합니다

'시스템'으로 레이크 작업을 호출하면 y 이후에 프로세스 상태를 확인하고 Rake 태스크가 실패하면 예외를 발생시킬 필요가있다. 그렇지 않으면 Rake 태스크가 실패하더라도 마이그레이션이 성공합니다. 더 좋은 옵션을 갈퀴 작업을한다 호출

if !($?.success?) 
    raise "Rake task failed" 
end 

- 그것은 레이크 작업이 실패하면 마이그레이션이 실패합니다 :

는이 같은 프로세스 상태를 확인할 수 있습니다.

관련 문제