上次MediaWiki從1.23.5和1.24.2升級到1.27.0還是在2016年,選擇1.27版本的原因是這是一個長支持周期的版本,可以在3年内不用大版本升級,但在2019年也到期了,本來應該升級到1.31這個長周期版本,不過也因為時間精力顧不過來而沒有進行,到2020年的1.35又是一個新的長周期版本,我們2020年10月就進行了測試,後來人手不足擱置了一段時間,現在2021年3月再次回頭來進行,終于是把剩下的小問題逐步解決,然後升級網站可以推出了,下面來記錄一下需要進行的工作。
首先到MediaWiki官方網站,下載最新穩定版本,閱讀1.35的發布說明,還需要按照官方的升級指導手冊來進行,升級過程:
- 備份MySQL數據庫中相關庫、表;
- 備份Web文件;
- 創建另外一個庫,将備份還原到新庫中;
- 創建另外一個目錄放置解壓後的1.35版本文件,将備份文件中的.htaccess, robots.php等自己創建的文件複制過來
- 修改dns創建一個測試域名
- 修改apache站點配置,測試域名指向新目錄
- 如果用到SSL,還要生成新測試域名的SSL證書
- 修改LocalSettings.php,讓老站中的一些設置在新站中生效
- 逐個檢查每個擴展程序,是否有最新版本需要升級,去進行獲取、根據需要修改配置
- 運行maintenance/update.php進行升級,數據量幾千到幾萬的站點大約需要30分鐘左右,數百萬頁面的站點需要6小時左右
- 在測試域名下對各種頁面進行檢查、對各種操作進行測試,發現問題逐個排查、解決
- 切換新老站點的目錄和其它一些配置,上線升級後的站點
幾個特别的擴展程序:
- 動态頁面列表DPL:老的Extension:DynamicPageList (third-party)已經不受支持,可改為新的Extension:DynamicPageList3,一些配置需要修改,用法上也有一些區别,需要仔細檢查,參看DPL3手冊
- 管理編輯權限的Extension:EditOwn這個也不再受到支持,可改為新的Extension:LockAuthor
-
Extension:ConfirmEdit的ReCaptcha NoCaptcha也調試通了,注意需要去Google ReCpatcha Admin Panel獲取站點Key和密碼
以前搞這些MediaWiki的升級都是我一個人弄,很費力,後面讓同事參與後争取可以做到有新版本就及時更新,不用像現在這裡幾年才搞一次,随時跟蹤MediaWiki的新變動、也避免一些安全問題、使用一些更新的功能。
同事還做了更多的工作,系列網站也還有一部分在進行升級中,我以後再來添加更多信息記錄在這裡。
遇到User name "Move page script" is usable, cannot create an anonymous actor for it. Run maintenance/cleanupUsersWithNoId.php to fix this situation.這種報錯,解決的辦法補充記錄在《MediaWiki升級報錯頁面版本找不到》這篇博文中。
2021年7月30日補充:
WikiSEO這個擴展升級後,自動産生了open graph、twitter cards等标簽,不過繁體版本卻是顯示的簡體字,包括meta description, keywords也是簡體,排查了好幾天,在WikiSEO模塊中修改程序都沒有搞好,最後我修改了includes/OutputPage.php中的addMeta和addHeadItem兩個函數,添加了簡體到繁體的轉換,才算是解決:
public function addMeta( $name, $val ) { //jamesqi 2021-7-30 if ($_SERVER['SERVER_NAME'] == 'tw.youbianku.com') { if (in_array($name, array('description', 'keywords'))) { $val = zh_hans_to_zh_hant($val); } } $this->mMetatags[] = [ $name, $val ]; } ... public function addHeadItem( $name, $value ) { //jamesqi 2021-7-30 if ($_SERVER['SERVER_NAME'] == 'tw.youbianku.com') { if (in_array($name, array('og:description', 'article:tag', 'twitter:description'))) { $value = zh_hans_to_zh_hant($value); } } $this->mHeadItems[$name] = $value; }
這個辦法不太正規,但暫時也隻好這樣來解決了。
评论