2011-08-17 62 views
2

我用CakePHP製作了一個簡單的CMS來處理一個小的(但正在增長的)數量的網站。隨着我經常在自己的機器上添加功能到開發版本,CMS不斷髮展。如何處理一個CakePHP web-app的多個安裝的部署和更新?

我使用SVN來跟蹤這個開發版本的發展,而這就是它。爲了創建一個新的網站,我基本上覆制/粘貼dev文件夾並修改必要的文件,然後通過FTP上傳新網站。

最後一個問題是,每個網站安裝都是獨立的,如果我想爲現有網站添加一些新功能,我必須手動複製文件。

另一個問題是,有些網站因爲特定的需要而修改了CMS版本:某些控制器類在本地版本中沒有具體的方法。

概括起來:

  • 我有一個基本的CakePHP應用程序經常演變
  • 目前已經安裝在不同的服務器上
  • 一些網站有自定義代碼的應用程序的多個版本(=網站)包括不存在的基本版本
  • 我希望能夠輕鬆地更新所有現在和未來的網站,當我改進基本應用程序,而不會破壞一些可能的特定部分

知道這是一個CakePHP應用程序,你會怎麼做?我應該如何更改我的代碼以同時管理核心和特定的代碼?

在此先感謝!

回答

2

...某些控制器類具有在本地版本上不存在的特定方法。

您也可以考慮在每個網站應用程序中設置additional class paths。您可以告訴CakePHP檢查其他目錄是否完全適用於當前應用程序缺少的文件。例如,你可以有以下目錄結構:

/app1 - a standard client's website application 
/app2 
/app3 - a custom client's website application (with custom controller) 
/core - the core CMS application 
/cake 

通過添加以下到您的/appN/config/bootstrap.php文件,你告訴CakePHP的尋找控制器在/core/controllers如果不能找到一個它在當前尋找應用。

App::build(array(
    'controllers' => array(ROOT . DS . 'core' . DS . 'controllers' . DS), 
)); 

這將,例如,允許你把你所有的CMS控制器在/core/controllers並刪除所有/appN/controllers目錄。只有客戶需要定製控制器的地方(即。/app3)你會創建一個控制器目錄,複製特定的控制器並進行修改(添加方法等)。

(這是該方法的Wildflower CMS開發了 - 注意/wildflower目錄)

+0

..您也可以使用['svn merge'](http://svnbook.red-bean.com/en/1.5/svn.ref.svn.c.merge.html)更新自定義控制器等當您對核心文件進行更改時。 – deizel

+0

此外,您可以使用['svn:externals'](http://svnbook.red-bean.com/en/1.0/ch07s03.html)將CMS的正確版本添加到每個網站。 – deizel

+0

感謝您的回答。我會更接近野花解決方案!隨着所有「融合」的討論,用git代替svn不是更明智嗎?我問,因爲我看到亞當F.提到這可能會更好地與Git,我在這裏總是合併與Git更容易。 – Leimi

1

使用版本控制軟件(如SVN)可能會爲你做伎倆。您所從事的每個網站都可能是遵循開發主要分支的分支。每當你想要應用到每個站點的更改時,你都會更新主分支,然後讓每個子分支從主分支導入更改。

請注意,我更習慣Git如何工作,所以這種情況在Git中可能比SVN,ymmv更好。

+0

+1。另外值得一提的是術語「合併」 - 將核心CMS分支的更改應用到每個站點的各個分支。 – deizel