2011-07-12 80 views
4

我們目前使用Phing進行部署,並使用dbdeploy來應用任何數據庫更改。但是,我們希望在部署期間進行更改,這些更改可以通過我們的對象模型更好地處理,因此我們編寫一次性PHP腳本,這些腳本是在部署後手動運行的。一次部署時運行腳本

是否有類似dbdeploy的處理運行腳本的現有解決方案,更重要的是,跟蹤哪些已運行,以便每個腳本只運行一次?

回答

1

我認爲這可能對其他人有用。如果您不能想到其他解決方案,我認爲最好的方法是查看實現DBDeploy task的文件,將其複製到自定義任務中,重新使用數據庫檢查功能,但不生成SQL腳本,而是執行腳本需要。

如果您對此感到滿意,您可能還會考慮將其貢獻給Phing。我相信他們會很樂意包括它(見Phing-How To Contribute)。

+0

這很有趣。出於某種原因,我認爲大部分功能都是由dbdeploy自己處理的,但它看起來像是將「changelog」概念的一大部分內置到了Phing任務中。如果沒有其他的東西存在,這會給我們一個開始「推出自己的」解決方案的好地方。 –

+0

是的,這可能有點令人困惑,但DBDeploy for PHP實際上完全是作爲Phing任務在PHP中實現的DBDeploy的「想法」。該腳本實際上非常簡單,因此根據您的需求進行修改應該非常簡單。祝你好運! – poisson

0

如何:

  1. 把你的腳本文件夾中。
  2. 循環瀏覽文件夾並執行腳本。
  3. 刪除/移動腳本文件一旦執行。

聽起來像一個黑客,但它是簡單的方式imo。

+0

dbdeploy運行方式的一個優點是它可以永久存儲更改並跟蹤哪些已運行。通過這種方式,它們存在於所有開發人員在其開發環境中運行的版本控制中。例如,我可以從新的數據庫開始,運行dbdeploy並保持最新狀態。我可以任意多次這樣做。 –

-1

我可以想象的最簡單的方法是使用Phing ExecTask,請參閱以及Phing User Guide (stable)

+0

ExecTask在這種情況下如何提供幫助?問題的作者是要求解決方案跟蹤哪些腳本已經運行,因此它不會再運行。 ExecTask無法實現這一點。所以我只是想知道...... – poisson

+0

正如鏈接手冊所示,這只是一個開始。最好是隨着時間的推移創建一個Phing Task。實際上,OP要求腳本在每次部署時執行一次,所以原始問題並不是那麼精確,而不是我怎麼理解,部署一次必須針對相同版本進行特定部署(特定系統)?在多個系統上? ... – hakre