2010-04-13 16 views
38

Yapılandırma verilerini bir dosyadan DB'ye yükleyen bir Rake görevim var, bir geçişte çağırmak için doğru bir yakut/ray yolu var mı?Taşıma işleminin içinden taşıma görevi yürütme?

Benim amacım olmadan ekibim DB yapılandırmaları görevilalala çalıştırmak için daha sonra yayına sahip senkronize etmektir

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 

GÜNCELLEME şimdi ne ve nasıl çalışır :

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

Ve bu, @Ryan Bigg numaralı öneridir. nd istisnadır:

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' 

Nerede yanlış gitti?

+2

Neden "rake" sözcüğünü iletirsiniz? Onsuz dene. Bir komisyon görevi olduğunu biliyor. – ryeguy

+0

@Fabiano: Cevabı güncellendi. –

cevap

72

Evet bunu yapmak için bir yol vardır:

parantez içine tırmık koymayın

Rake::Task['your_task'].invoke 

Güncelleme, sadece adı görevin. ENV['file']

+0

Cevabınız ile bir güncelleme yaptım, biraz daha yardımcı olabilirseniz memnun oldum –

+1

"Rake" olmadan deneyin ... – ryeguy

+3

Görev bir isim alanındaysa ne olur? "Yarı yarı: tohum [89]" ile çalıştırılabilecek bir tohum sistemim var (89_' ile başlayan .rb dosyasını çalıştıracağım), ancak bunu Rake :: Task ['semi: seed [89] '] 'Bir göç dosyasında tohum görevini nasıl çağırdığım hakkında bir fikriniz var mı? – MrYoshiji

9
olarak ayrı ayrı

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

Bu görevler satışa sunulacak onu çağrılması konsolun

FILE=somefile.text rake db:sistema:load_data 

yılında

: Bu çalıştırırken bir ENV değişkenini belirlesin

"Sistem" ile Rake görevini çağırırsanız, y Daha sonra işlem durumunu kontrol etmeli ve Rake görevi başarısız olursa bir istisna oluşturmalısınız. Aksi takdirde, Rake görevi başarısız olursa bile geçiş başarılı olacaktır. güzel bir seçenek tırmık görevi olduğunu çağırma

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

- bu Rake görev başarısız olursa göç başarısız olmasına neden olur:

Böyle süreç durumunu kontrol edebilirsiniz.