2010-04-13 68 views
38

我有一個Rake任務將配置數據從文件加載到數據庫中,是否有正確的ruby/rails方式在遷移時調用它?從遷移內執行Rake任務嗎?

我的目標是同步我的團隊DB CONFIGS,沒有已經播出,然後再執行任務LALALA

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,a nd例外:

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

你爲什麼要在「耙」這個詞中通過?沒有它,嘗試它。它知道這是一個耙子任務。 – ryeguy 2010-04-14 13:02:33

+0

@Fabiano:更新了答案。 – 2010-04-14 20:29:36

回答

72

是有辦法做到這一點:

Rake::Task['your_task'].invoke 

更新

不要把耙括號內,只是名的任務

在控制檯

FILE=somefile.text rake db:sistema:load_data 

分別

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

這將是你的任務可以調用它作爲ENV['file']

+0

我用你的答案做了一個更新,很高興你能幫助更多 – 2010-04-14 13:01:34

+1

不用「耙」試試吧.. – ryeguy 2010-04-14 13:05:27

+3

如果任務在命名空間中怎麼辦?我有一個可以用'rake semi:seed [89]'運行的種子系統(將運行以'89_'開頭的.rb文件),但是我不能用'Rake :: Task ['semi:種子[89]']'你有關於如何在遷移文件中調用種子任務的想法嗎? – MrYoshiji 2014-05-15 14:26:38

9
:運行此時,您應該設置一個環境變量ENV

請注意,如果您使用'system',y調用Rake任務之後需要檢查過程狀態並在Rake任務失敗時引發異常。否則即使Rake任務失敗,遷移也會成功。

您可以檢查這樣的進程狀態:

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

調用rake任務是一個更好的選擇 - 它會導致如果Rake任務失敗遷移失敗。