我正在CakePHP中開發一個系統,使用Git作爲版本控制系統。我在測試服務器上有一個工作副本,另一個在我的生產服務器上,都有不同的數據庫。每次我進行更改時,都必須更改數據庫配置,以便測試系統。是否有另一種方法來保存兩個文件,其中有不同的內容,一個在測試中,另一個在生產服務器中?分支機構是一個很好的途徑?設置測試和生產環境
3
A
回答
1
我已經有了一個相當粗糙而有效的技術:在我的開發環境中,我有一個名爲'environment_development'的空文件。在我的生產環境中,我有一個名爲'environment_prODUCTION'(不同情況下增加視覺重點)。我的gitignore文件被設置爲忽略這兩個。我的應用程序(我使用Kohana框架,但我假設CakePHP有類似的東西)的前端控制器檢查這些文件的存在並適當地設置IN_PRODUCTION常量。其餘的代碼(數據庫配置,錯誤處理等)可以檢查此常量的值並根據需要更改行爲。
我以前用的是$ _ SERVER [「SERVER_NAME」]檢查,但這種方法具有以下優點:
- 它的工作原理,即使有你的應用程序的部分要在命令行中運行例如,當cronjobs沒有設置$ _SERVER時。
- 即使您的應用在多個域上運行,它也能正常工作。這是完全明確的:如果有人簽出應用程序的另一個工作副本,那麼在創建環境文件之前沒有任何功能可用,所以沒有(或很少)有人對生產數據庫運行開發代碼,反之亦然。
4
你不想用分支做到這一點。我不能專門與PHP交流,但是不要將兩個文件(測試配置&生產配置)保存在不同的分支中,而是讓它們保持在一起,但是讓環境變量確定哪個配置是正確的配置運行。
(這是它是如何在Rails的做,效果很好。)
0
如果數據庫依賴於環境中,你可以做這樣的事情在database.php
文件:
class DATABASE_CONFIG {
var $default = NULL;
var $prod = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'username',
'password' => 'password',
'database' => 'productionDatabaseName',
'prefix' => '',
);
var $staging = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'username',
'password' => 'password',
'database' => 'stagingDatabaseName',
'prefix' => '',
);
//var $dev = ...
// Chooses production or staging depending on URL
function __construct()
{
if(isset($_SERVER['SERVER_NAME']))
{
switch($_SERVER['SERVER_NAME'])
{
case 'myhostname.com':
case 'www.myhostname.com':
$this->default = $this->prod;
break;
case 'staging.myhostname.com':
$this->default = $this->staging;
break;
default:
$this->default = $this->dev;
}
}
else // Use local for any other purpose
{
$this->default = $this->dev;
}
}
}
相關問題
- 1. BizTalk EDI測試和生產環境設置
- 2. Tomcat測試和生產環境
- 3. 在非生產環境中測試生產配置文件
- 4. 不同於測試和生產環境的開發環境?
- 5. Web開發生產/測試/開發環境設置
- 6. 設置的BizTalk測試環境從生產
- 7. 設置Web測試環境
- 8. 區分Websphere Commerce中的生產環境,臨時環境和測試環境
- 9. Symfony2測試數據庫生產環境
- 10. 生產/測試環境容易問題
- 11. Dockerfile生產/建設/調試/測試環境
- 12. 如何根據燒瓶中的測試和生產環境分配設置?
- 13. HttpPostedFileBase null在生產環境中,但沒有測試環境
- 14. 生產環境中的System.Runtime.Serialization.InvalidDataContractException,而不是測試環境
- 15. 在生產環境中設置Subdomain-Fu?
- 16. 測試擱置演示生產環境的變化?
- 17. Tomcat web應用程序生產環境和測試環境的屬性
- 18. Rails環境部署(開發/測試和生產)
- 19. mongoid如何爲測試和生產環境創建索引
- 20. Git/Bitbucket上測試和生產環境的分支
- 21. 在測試和生產環境中的壞ETag值
- 22. 亞馬遜AWS上的測試和生產環境
- 23. 測試和生產環境之間的數據不同
- 24. 我如何確保生產,測試和開發環境,
- 25. 將iisnode中的Node.js環境變量(NODE_ENV)設置爲生產/開發/測試
- 26. 爲SSIS 2008設置測試環境
- 27. 如何設置Active Directory環境測試?
- 28. 運行測試時設置環境
- 29. 設置環境變量測試
- 30. JUnit4,Spring,Hibernate測試環境設置
我同意。您不想在您的版本控制軟件上花費過多的時間來處理與版本無關的事情。你最好將你的應用程序設計爲固有可測試的。 – 2009-06-12 19:39:56