Phing en dbdeploy görevi otomatik olarak delta hata geri alma Başlarken

4 Cevap php

I manage my database schema için dbdeploy task Phing 's kullanıyorum. Bu sürece hiçbir hata benim delta dosyaları sorgularda olduğu gibi, iyi çalışıyor.

Bir hata varsa Ancak, dbdeploy sadece hata ile sorguya delta dosyaları çalıştırın ve daha sonra iptal olacaktır. Ben sonra el changelog tabloda giriş geri almak zorunda çünkü bu, bana biraz hayal kırıklığı olur. Ben yapmazsam, dbdeploy göç bir sonraki denemede başarılı oldu üstlenecek, bu yüzden herhangi bir yeniden deneme hiçbir şey yapacağız.

Yani soru, is there any way to get dbdeploy use transactions or can you suggest any other way to have phing rollback automatically when an error occurs?

Not: I'm not that proficient with Phing, so if this involves writing a custom task, any example code or a url with further information is highly appreciated. Thanks

4 Cevap

(Eğer hala orada iseniz ...) DB'ın dökümü yardımcı programını kullanın ve bir Phing görev oluşturmak, bir db dökümü görev için phing ilgili. Ben esas postgres kullanmak ve Phing build.xml bu var:

<target name="db-dump" depends="">
    <php expression="date('Ymd-Hi')" returnProperty="phing.dump.ts"/>
    <exec command="pg_dump -h ${db.host} -U ${db.user} -O ${db.name} | gzip > ${db.dumppath}/${db.name}-${phing.dump.ts}.gz" />
</target>

Sorunu çözme basit yolu varsayılan işlem sql komut dosyasını çalıştırır pdoexec görev kullanmaktır. Hata veritabanı motoru otomatik olarak değişiklikleri geri olacaktır oluştuğunda (değişim günlüğü masanın üzerinde olanlar bile - veritabanı önceki bir devlet olacaktır)

Örnek:

<pdosqlexec 
    url="pgsql:host=${db.host}
    dbname=${db.name}"
    userid="${db.user}"
    password="${db.pass}"
    src="${build.dbdeploy.deployfile}"
/>

Neden geri alma deltalar bir dizi yazmak ve diğer görev başarısızlığı üzerine çalışan bir Phing görev eklemek değil mi?

Bunu yapmak için "doğru" yolu şema değişiklikten önce, sonra hata durumunda geri alma bir destektir.

Sen kullanmak db ne dedikleri - ama tüm şema değişiklikleri işlemlerinde desteklenen olacağını eğer beni merak ediyorum. Mos uyluk uç SQL veritabanları (Oracle, DB2, SQL Server) gerçekten iyi nedenler için her durumda bunu istemiyorum. Transacitonal şema değişiklikleri gerçekten zor ve gerçekten yoğun resouce.