從CakePHP 1.3升級到2.5,cakephp1.3升級2.5
從CakePHP 1.3升級到2.5
摘要:最近把一個CakePHP 1.3的項目升級到了2.x,當然就用最新的版本2.5.3了,結果基本滿意。本文記錄了升級的過程,包括使用的工具,遇到的問題和相應的解決方案。
這篇文章涉及的內容要求至少有CakePHP中級水平,如果你是剛開始使用CakePHP,建議先不要作這樣的嘗試,否則遇到問題都不知道怎麼解決。
目錄
1. 為什麼要升級
2. 項目概況
3. 使用的工具
4. 升級的過程
5. 升級之後遇到的問題及解決方案
A. 參考資料
1. 為什麼要升級
升級到最新版本有很多好處,可以得到最新的更新和功能,可以使用DebugKit這樣的調試工具,可以使用View Block方便地把CSS和JavaScript放在頁面中你希望的地方,而不再痛苦地受限於舊的方式,等等。View Block一直是我最希望使用的特性。
2. 項目概況
這個項目的開發大致起始於2012年底,我從2013年中開始參與,到2014年中,所有使用者要求的功能基本都完成了。我參與了大概1年左右,只是利用業餘時間進行。代碼一開始是抄自於一個CakePHP 1.3的項目,而沒有使用當時最新的2.x版本,這也使得許多開發工作不能利用架構最新的特性和工具,延長了開發週期。可以說,這個項目從開始就做了錯誤的選擇。先後參與的開發人員前後有6個人之多,多數是臨時抓來的,大部分人做一段時間之後就會離開,有些功能甚至沒有完成就走人了。而且大家對CakePHP這個架構沒有深入的瞭解,導致這個項目的代碼沒有一致性,也缺乏統一的計劃、架構和規範,沒有單元測試。總之,項目的代碼品質是不能令人滿意的。這些恐怕是大部分業餘項目難以避免的問題。
幸好,這個項目不算特別複雜,計有:
- 資料庫有36張表
- 19個控制器(Controller)
- 33個模型(Model)
- 63個視圖(View)
- 2個外掛程式(Plugin)
- 當然還有其他一些東西
通過這些資料可以看出這個項目的規模,應該說是個中小型網站吧。
3. 使用的工具
升級只使用了2個工具,首先是官方的Upgrade Shell,以及DerEuroMark的Upgrade Plugin。
4. 升級的過程
真正動手升級之前我花了一些時間閱讀參考資料中列出的文檔,實際的升級過程前後總共花了4天時間,不過這裡面相當一部分時間用於升級後的測試、以及尋找解決問題的方法。我畢竟從1年前才開始真正使用PHP和CakePHP來開發實際使用的網站,而且只是利用業餘時間,所以時間有限,很多東西也都是邊做邊摸索學習,主要目標是要完成使用者需求所要求的功能,來不及瞭解CakePHP架構的各個方面。如果你有相應的經驗,或者有解決下面所涉及問題的這些知識,這個過程會快許多。
4.1 備份
首先,確保升級之前,應用程式運行良好,做好代碼和資料的備份。如果沒有備份,請就此打住!!!
我使用Git(TortoiseGit)做源碼控制,這讓我可以隨時回到過去某一個時間點。資料庫使用的是MySQL,升級之前也要做好備份。如果升級過程出了問題,進行不下去,備份讓你可以恢複到開始升級之前的狀態;如果沒有備份,那你可就進退維穀了。
4.2 更新CakePHP的核心庫到2.x
這個項目在升級前的目錄結構,如所示,
圖中,cake為CakePHP 1.3的核心庫,app是應用程式代碼。
下載最新的CakePHP,我用的是2.5.3,開啟壓縮包,如所示。
圖中的lib目錄就是CakePHP的核心庫,把這個lib目錄拷貝到根目錄下,然後刪除1.3的cake目錄,得到如所示的目錄結構。
圖中的lib\Cake目錄就是CakePHP 2.x的核心庫。
4.3 準備升級工具Upgrade Shell
Upgrade Shell是CakePHP核心的一部分,位於lib\Cake\Console\目錄下,只需確保能夠運行CakePHP Console可執行檔就可以了,這可以參考CakePHP Console的文檔。如所示,
圖中的cake是*nix下的可執行檔,cake.bat是Windows下的可執行檔。我採用的做法,是參考了Upgrade Shell的文檔,把lib\Cake\Console\目錄拷貝到app目錄下,這樣只是執行的命令列路徑有所不同,結果是一樣的,如所示。