2010-07-19 55 views
2

我正在PHP網站上工作,我剛剛在其中運行的環境中添加了一個交換機 - development,它在本地站點上運行時爲production,當它運行時爲production在虛擬主機上:Mercurial - 部署和開發存儲庫

<?php 
define('ENV','development'); 
//or 
define('ENV','production'); 

我有VC下的網站有水銀,通常只需用hg push部署我的網站(服務器運行HG過),但是,在加入這個開關,「生產」網站將始終與「開發」網站不同,因爲現場部署的版本始終設置爲production而不是development

這意味着我的部署過程從

  1. 去開發
  2. 測試
  3. hg commit -m "Made changes"
  4. hg push
  5. ssh host hg update
  6. 轉到1

  1. 開發
  2. 測試
  3. hg commit -m "Made changes"
  4. 變化developmentproduction
  5. `汞提交-m 「開發 - >督促」
  6. hg push
  7. ssh host hg update
  8. (後:)更改production - >development
  9. hg commit -m "prod -> dev"
  10. 轉到1

這顯然不是很大。

是否有某種方法可以保持一個與另一個絕緣,以便活動站點將始終設置爲production,並將本地副本設置爲development

回答

3

而不是有一個開關,有一個開發分支和一個生產分支。

hg up prodbranch 
hg merge -r devbranch 
hg push 
ssh yourserver hg update prodbranch 
+0

所以在我的生產分支中,我將特定於它的代碼(如數據庫配置)存放在活動分支中,並且在我的開發分支上,我保留特定於其本地的代碼?並且跨分支合併是如何工作的?如果我更改影響兩個分支的代碼,合併是否會捕獲這個問題? – 2010-07-19 22:07:08

+0

是的,它也會帶來合併錯誤的高風險。您應該有更好的策略來保持您的生產/開發設置獨立於濫用SCM。 – 2010-07-19 22:12:00

+0

@奧斯汀:嗯,我會保持代碼回購之外的配置。我有1個配置生產回購,以及100%不同的配置epo開發。 – 2010-07-19 22:39:45

3

如果你有一個Apache網絡服務器,你可以在server/vhost/per-directory /中設置它。htaccess的配置:

SetEnv Deployment development 

或者在生產

SetEnv Deployment production 

而在你的腳本中使用:

define('ENV',$_ENV['Deployment']) 

我認爲(因爲它通常是這樣),實際的Web服務器/虛擬主機的配置之外正常的代碼。

http://httpd.apache.org/docs/2.2/mod/mod_env.html#setenv

0

你有沒有想過只是沒有把你conifguration文件版本控制之下?

+0

那麼,網站的配置部分實際上只佔用了很小的一部分,並且在代碼中工作,而不是在它自己的文件中。我想過重構它,但即使我這樣做了,這不是問題的要點(這是具體的例子,也是問題的主要原因,但不是問題的根源 - 具有相同的源代碼稍微改變,但與相同的語義) – 2010-07-20 00:47:16