2012-03-20 49 views
2

我希望能夠以最有效的方式自動區分我的開發服務器和生產(和測試版)服務器,而不需要依賴諸如HTTP_HOST之類的東西。我希望這對其他開發者來說是透明的,所以他們不必擔心。區別開發服務器和生產效率對於PHP

我正在使用預編譯css和壓縮js,當我部署到生產,但我想要生產的未壓縮js(和飛行complied css)。一個簡單的「開發」標誌就足以區分它們,但是什麼是在不浪費生產資源的情況下將此變量納入開發環境的最佳方式?

我目前的計劃是動態地重寫一個php(或者ini文件,用parse_ini_file解析)文件作爲我們部署過程的一部分,將開發者設置爲false(我可以重寫這個文件來爲這個文件設置新的文件名編譯後的CSS和JS)。但是,我擔心如果出現意想不到的情況,就像寫下的部署腳本出問題一樣,開發人員模式可能會被推向生產。換句話說,我希望在那裏有一些具體的開發環境,這樣就不會有生產系統被誤認爲開發系統的風險。

我認爲使用單獨的user.ini文件來設置自定義的「開發」標誌來區分這一點,但是我很難讓它工作,並且希望看到在我花費更多時間之前是否有更好的解決方案。

回答

4

你可以做的是在每個服務器上的httpd.conf文件中設置標誌。所以對於你的Dev框,你可以將它添加到你的apache conf SetEnv APPLICATION_ENV development。對於你的生產箱,做同樣的SetEnv APPLICATION_ENV production

在你的PHP應用程序配置,你可以做這樣的事情:

switch ($_SERVER['APPLICATION_ENV']){ 

    case 'production': 

     define('SOME_CONSTANT', 'SOME VALUE'); 

     break; 

    case 'development': 

     define('SOME_CONSTANT', 'SOME VALUE'); 

     break; 
} 
+0

這是我之前使用的非常可靠的解決方案,但是我建議您小心地將檢測默認爲非prod。通過這種方式,如果您忘記在新服務器上設置環境變量,它的行爲就像一個非prod盒子。你也可以通過在特定的apache站點配置中使用' SetEnv APPLICATION_ENV production ...'將變量限制在特定的虛擬主機上。 – 2015-02-16 23:48:47

1

我可能會把所有的dev服務器放到一個子域中,並通過HTTP_HOST來使用它,但是如果你想避免這種情況,我會說最好的方法是在這些服務器上的配置文件中使用一個標誌(如果這是你所嘗試的,那麼出了什麼問題?)或者測試某個特定的文件/目錄是否存在,這些文件/目錄在生產時會丟失。配置文件中的標誌是我使用的方法,也是我看到最多的方法。很難設置它意外。

或者,您可以通過GET設置一個標誌,在您需要時切換到開發版的庫。

我對目前爲止還沒有起作用的東西有點不清楚 - 它實際上是導致問題的持續集成問題嗎?

+0

爲了闡明,在我們的開發服務器上,我們有apache運行一組虛擬主機,每個開發人員有一個(或多個)虛擬主機。在我的虛擬主機的部分,我添加了: AllowOverride全部 php_value user_ini.filename「/var/www/foo/dev.ini」 – Karptonite 2012-03-20 16:04:07

+0

但是,重新啓動apache後,當我查看user_ini.filename的值php代碼,(使用ini_get)我得到默認值。這是我第一次搞砸apache conf文件,所以我可能錯過了一些明顯的東西。 – Karptonite 2012-03-20 16:07:50

+0

與Apache conf文件混淆時,這很正常;)AllowOverride是關於.htaccess文件不是嗎?我有點生疏,但我認爲你仍然需要在每個用戶的文件系統中添加配置覆蓋。 – 2012-03-20 16:14:35

0

在我們公司,我們從生產由從提交和排除的配置文件的方式區分我們幾個開發服務器包含每個環境的實際設置,以及指示服務器狀態的變量。

相關問題