德扑之星有限公司官方网站

如何通過Drupal Rector來快速升級Drupal

 

Drupal升級的成本為什么高⒜⒝⒞⒟⒠⒡⒢⒣⒤?由于歷史原因❻❼❽❾❿⓫⓬⓭⓮⓯⓰,Drupal 7和以前的版本⒔⒕⒖⒗⒘⒙⒚⒛ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅰⅱ,都是基于函數化變成的㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉,所以有很多Hook㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉,類似比較老的C語言☾☽❄☃,當然里面也有一些自定義的OOP的結構ⓚⓛⓜⓝⓞⓟⓠⓡⓢ,但是總體來說比較老舊⓱⓲⓳⓴⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾。

自從Drupal 8之后✵✶✷✸✹✺✻✼❄❅,Drupal就基于比較強檔的Symfony來開發㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉,Symfony本身是OOPⅲⅳⅴⅵⅶⅷⅸⅹⒶⒷⒸⒹ、IoC✺ϟ☇♤♧♡♢♠♣♥、SOP類型的開發㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉,所以整個Drupal就做了較大的升級和改進☈⊙☉℃℉❅。

這樣就帶來了一個負面效應⑰⑱⑲⑳⓪⓿❶❷❸❹❺,就是Drupal 7升級Drupal 8難度非常大✵✶✷✸✹✺✻✼❄❅,甚至基本會導致重新開發☈⊙☉℃℉❅。

這個問題一度導致Drupal 8的安裝量相比Drupal 7急劇下降ⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉ,并且也給人留下了一個Drupal很難升級的印象☈⊙☉℃℉❅。所以后來Dries就承諾❣❦❧♡۵,Drupal 升級永遠不會再困難 (Making Drupal upgrades easy forever)㈠㈡㈢㈣㈤㈥㈦。

 

本文就介紹一下Drupal 8后面的升級情況♦☜☞☝✍☚☛☟✌✽✾✿❁❃,以及使用Rector提高升級的效率做一個簡單介紹❣❦❧♡۵。

 

Drupal 10 升級

 

Drupal升級的規律和版本間的差異

 

Drupal 8 版本后☾☽❄☃,Drupal 分三個類型的版本ⓣⓤⓥⓦⓧⓨⓩ,

1. 子版本⒜⒝⒞⒟⒠⒡⒢⒣⒤,比如 8.1.1, 8.1.2❣❦❧♡۵,8.1.3等☈⊙☉℃℉❅,這種子版本基本就是對當前小版本的bugfix之類ⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉ,一般可以直接升級ⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉ,不會有太大問題⒃⒄⒅⒆⒇⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓。

2. 小版本ⅲⅳⅴⅵⅶⅷⅸⅹⒶⒷⒸⒹ,比如8.1①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯,8.2♀☿☼☀☁☂☄,8.3☈⊙☉℃℉❅,這種小版本一般是6個月發布一次⒃⒄⒅⒆⒇⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓,功能包括 bug fixes, 新feature, API改進✤✥❋✦✧✩✰✪✫✬✭✮✯❂✡★✱✲✳✴,還有廢棄某一部分APIⓣⓤⓥⓦⓧⓨⓩ。

3. 大版本☈⊙☉℃℉❅,比如8㈠㈡㈢㈣㈤㈥㈦,9⒃⒄⒅⒆⒇⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓,10這種大版本☈⊙☉℃℉❅,這種大版本的發布主要是核心主動升級⒃⒄⒅⒆⒇⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓,比如Symfony升級ⓣⓤⓥⓦⓧⓨⓩ、或者其他比如數據庫⑰⑱⑲⑳⓪⓿❶❷❸❹❺、技術迭代比如7到8等而導致的⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵❆❇❈❉❊†☨✞✝☥☦☓☩☯,此外也會有新feature✤✥❋✦✧✩✰✪✫✬✭✮✯❂✡★✱✲✳✴,API改進等㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉。

 

大版本和小版本的區別

大版本也包括了小版本的內容⑰⑱⑲⑳⓪⓿❶❷❸❹❺,但是大版本還會做兩件事ⅲⅳⅴⅵⅶⅷⅸⅹⒶⒷⒸⒹ,

1. 升級核心組件和依賴☧☬☸✡♁✙♆。,、':∶;,比如Symfony更新

2. 刪除被標記deprecated的API

如果一個系統沒有使用deprecated api的話①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯,升級大版本和小版本幾乎差不多⑰⑱⑲⑳⓪⓿❶❷❸❹❺。

可以查看下圖分析⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵❆❇❈❉❊†☨✞✝☥☦☓☩☯,來看Drupal核心和API之間的關系✵✶✷✸✹✺✻✼❄❅,

 

 

Drupal 8 到 Drupal 9 的步驟

 

我們來看一下 Drupal 8 升級到 Drupal 9 都有哪些坑要踩⒔⒕⒖⒗⒘⒙⒚⒛ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅰⅱ?

 

  1. 升級所有第三方模塊和主題到最新版
  2. 運行drupal-check 或者 Upgrade Status 獲取所有被廢棄的模塊❻❼❽❾❿⓫⓬⓭⓮⓯⓰。
  3. 檢查被廢棄的模塊㈠㈡㈢㈣㈤㈥㈦,看看drupal官網有沒有替代辦法或者更新計劃⒔⒕⒖⒗⒘⒙⒚⒛ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅰⅱ。
  4. 應用所有官網的補丁
  5. 再次運行drupal-check 或者 Upgrade Status 看看還有哪些模塊是廢棄掉的㈧㈨㈩⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂。
  6. 被廢棄的模塊♀☿☼☀☁☂☄,沒有替代辦法⒔⒕⒖⒗⒘⒙⒚⒛ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅰⅱ,就只能手動修復或者放棄該模塊ⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉ。

我們看看Drupal被廢棄的API和函數統計㈧㈨㈩⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂,如下:

大約有 33,000 處被廢棄和更新⒜⒝⒞⒟⒠⒡⒢⒣⒤,那么如果是一個深度的項目☧☬☸✡♁✙♆。,、':∶;,這個修改成本就會很高ⓊⓋⓌⓍⓎⓏⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙ。

 

 

PHP Rector

 

什么是Rector, 他是一個類似于只能PHP轉換工具❻❼❽❾❿⓫⓬⓭⓮⓯⓰,可以自動升級 PHP☧☬☸✡♁✙♆。,、':∶;,并且可以理解PHP的內容ⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉ,然后代碼成其他更兼容的格式웃유ღ♋♂。

所以✤✥❋✦✧✩✰✪✫✬✭✮✯❂✡★✱✲✳✴,聽起來個很高級的工具㈠㈡㈢㈣㈤㈥㈦!

 

Rector的原理

  1. 分析PHP代碼成為一個抽象語法樹 (AST)
  2. 運行一些PHP的升級規則
  3. 保存所有的修改到文件

Rector目前能做的

  • 修改 classes, methods, properties, namespaces or constants
  • 升級代碼 從PHP 5.3 to PHP 7.4
  • 升級代碼從 Symfony 3 to Symfony 4

 

 

Drupal Rector 模塊

 

Drupal也有了Rector的模塊㈧㈨㈩⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂,具體可以訪問 

https://github.com/palantirnet/drupal-rector 

https://drupal.org/project/rector.

也可以直接通過composer來安裝①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯,composer require palantirnet/drupal-rector --dev

安裝完成之后①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯,就可以運行rector來自動升級相關的模塊㈠㈡㈢㈣㈤㈥㈦,以便適配Drupal 9的核心代碼☾☽❄☃,可以參考下面的示例

 

最后ⅲⅳⅴⅵⅶⅷⅸⅹⒶⒷⒸⒹ,還是推薦盡快升級到Drupal的最新版本⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵❆❇❈❉❊†☨✞✝☥☦☓☩☯,Drupal的一些新功能㈠㈡㈢㈣㈤㈥㈦,新模塊⓱⓲⓳⓴⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾,都是在Drupal的最新版本上有所體現ⅲⅳⅴⅵⅶⅷⅸⅹⒶⒷⒸⒹ,所以升級新版本也能帶來更多新特性的嘗試❣❦❧♡۵。

 

更多資料ⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉ,請參考我們之前的文章:

1. Drupal 10 初探及常見問題答疑

2. Drupal 7/8/9 如何升級到Drupal 10❋❀⚘☑✓✔√☐☒✗✘ㄨ✕✖✖⋆✢✣?

3. Headless CMS:以API為輸出的內容系統的構建

4. 開源的CMS如何實現問卷調研✤✥❋✦✧✩✰✪✫✬✭✮✯❂✡★✱✲✳✴?

5. 基于Drupal的在線教育網站案例

 

德扑之星官网下载 网站地图