一般來說,我們有開發環境(DEV)、測試環境(TEST)、生產環境(PROD)。
怎樣解決自動根據不同環境切換相應的配置文件的問題呢?
本文以php為例。
最簡單的方法,是確保三種環境的服務器可以給出一模一樣的設置給程序,如數據庫地址、端口、數據庫名、用戶名密碼等。但在資源緊缺的環境下可操作性不強。
首先,無論如何,建三個對應的配置文件是必須的。
如:
config.dev.php
config.test.php
config.prod.php/config.php
然后,便是自動切換的問題。
其實,正常情況下,這三者的運行環境可能都相同,無法簡單的通過環境的不同進行區分。除非那種極客型的,如修改php代碼,不同環境增加不同環境變量標示手動編譯PHP,這樣運行環境中就具備了區分標示,然后封裝一個判斷方法。同樣在資源緊缺的情況下,可操作性不強。
剩下比較可行的,就是通過文件軟連接的方式。*nix、Windows都有辦法創建文件軟連接,系統無論有幾個配置文件,在運行時都只需要一個文件,所以在不造成相應程序大幅改動代碼來實現切換的話,就是這種方案了:
config.dev.php
config.test.php
config.prod.php
然后手動在每種環境創建軟連接config.php,指向對應的文件config.xxx.php。
實在像虛擬主機,就直接在服務器上把config.prod.php 改成 config.php
PS
在大型的應用中,異常復雜的無數資源需要調用的環境,專門做一個資源管理與調度的系統,然后針對每種資源如MySQL服務編號命名,然后在應用環境中,調用統一的api來獲取配置資源。這種方式,其實還是要在資源比較充足的情況下,尤其測試環境與正式環境不能在一臺機器上。這樣,可以根據應用請求的ip或端口來判斷:那臺是測試服務器,我就返回一個測試用的配置數據給它;這臺是正式環境,就返回正式的配置。
PPS
有一個《2011PHP技術高峰論壇演講-張宴》這樣的課件,從當初發布到網上,期間看了很多次,里面演示的很多東西,都有很強的啟發意義。
新聞熱點
疑難解答