MediaWiki的升級并不輕松,因為我們已有的網站都有不少地方采用了特别的擴展程序、進行了特别設置、甚至進行了源程序的改動,所以有不少細節需要檢查、修複和改進,這次時隔4年後進行1.16.0到1.23.5的升級也遇到好些問題,下面進行記錄。
一、擴展程序:
- 與1.16.0配合的多數擴展程序都不能與1.23.5配合了,直接升級會遇到很多報錯,我是先關閉CommonSettings.php中的一些第三方擴展,進行核心程序升級,以後再安裝新的第三方擴展;
二、設置修改:
- 如果用到用戶數據庫的共享,升級的時候也會遇到問題,具體請看Manual:Shared database,可以使用update.php --doshared這個參數來做共享數據庫用戶表的升級;
三、皮膚文件:
- 順便把以前的廣告代碼、統計代碼進行更新,并把廣告代碼盡量轉移到Vector.php中,清空相應廣告模闆中的内容
- 另外,找到了辦法可以盡量少修改皮膚文件,甚至可以不修改皮膚文件,而是通過在LocalSettings.php中添加參數來進行設置;
四、繁體版本:
-
多語言:MediaWiki:Variantname的各種中文版本以前設置為disable,現在需要删除
- 讓繁體版也用File Cache:修改includes/cache/HTMLFileCache.php,将
-
elseif ( $query === 'maxage' || $query === 'smaxage' ) {
改為
-
} elseif ( $query === 'maxage' || $query === 'smaxage' || $query === 'variant' ) {
将
-
return !$user->getId() && !$user->getNewtalk() && $ulang == $clang;
改為
-
return !$user->getId() && !$user->getNewtalk();
五、多個版本同步更新緩存的問題:
繁體版File Cache更新問題:1.10版本好像沒有問題,1.15改index.php解決,但1.16.0版本始終沒有解決,在index.php中調試下面的代碼沒有成功:
/* //jamesqi 2013-3-28 purge old file cache $title=$wgTitle; $timestamp=$wgTitle->getTouched(); $cachetime=$cache->fileCacheTime(); if ($timestamp > $cachetime) { # Purge squid for this page only $title->purgeSquid(); # Clear file cache for this page only HTMLFileCache::clearFileCache( $title ); } // */
這次找到1.15中改index.php的一個例子,将1.16.0的index.php這樣修改也可以了,将:
-
if( $cache->isFileCacheGood( /* Assume up to date */ ) ) {
改為
-
if( $cache->isFileCacheGood( '20880808112233' ) ) {
也就是改為一個始終大于目前日期的日期數字
1.23.5版本的index.php中沒有上面的内容了,要改includes/Wiki.php,将
-
if( $cache->isCacheGood( /* Assume up to date */ ) ) {
改為
-
if( $cache->isCacheGood( '20880808112233' ) ) {
- 以上辦法仍然不對,現在在1.23.5中改為修改includes/cache/FileCacheBase.php ,讓清除簡體中文版的文件緩存時,一起把簡體手機版、繁體中文版、繁體手機版的文件緩存都删除,代碼:
-
public function clearCache() { wfSuppressWarnings(); //jamesqi 2014-11-5//unlink( $this->cachePath() ); //add start $cachePath_zh_cn=$this->cachePath(); $cachePath_zh_tw=str_replace('www.','tw.',$cachePath_zh_cn); $cachePath_zh_cn_mobile=str_replace('www.','m.',$cachePath_zh_cn); $cachePath_zh_tw_mobile=str_replace('www.','tw.m.',$cachePath_zh_cn); unlink( $cachePath_zh_cn ); unlink( $cachePath_zh_tw ); unlink( $cachePath_zh_cn_mobile ); unlink( $cachePath_zh_tw_mobile ); //add end wfRestoreWarnings(); $this->mCached = false; }
六、其它問題:
- 報錯:A database query error has occurred. This may indicate a bug in the software.,可能是LocalSettings.php或者Vector.php設置不當;
- 遇到php版本過低的情況,就需要php升級到更新版本,mediawiki-1.23.5的要求:
* Web server with PHP 5.3.2 or higher.
* MySQL 5.0.2 or higher - php安裝後一些warning, notice報錯,改了一下php.ini:error_reporting = E_ALL & ~E_NOTICE,再重啟apache,刷新頁面可以了
- php重新安裝後無法連接數據庫,修改php.ini中的mysql, mysqli, pdo文件
- php報date()有錯,需要設置時區(設置時區後mediawiki filecache文件緩存.html.gz壓縮文件無法呈現的問題也自動解決了,這個問題存在很多年了,以前一直沒有找到确切的問題所在)
- extension:include_php被删除了,無法實現升級,但依然可以用
- 手機版xmlsitemap,在對應的電腦版maintenance下需要添加一個修改後的文件generateSitemapMobile.php,參看:《MediaWiki網站手機版的站點地圖Mobile_XML_Sitemap》
- 遇到用腳本升級總是提示DPL報錯,臨時做一個CommonSettings_mingluji_pucha_temp-1.23.php 這個文件,其中把DPL的調用關閉了,現在可以運行腳本升級了
- 遇到數據量大的網站pucha總是升級不成功,中途報錯,主要是categorylinks這個表太大,有上千萬條數據,加大mysql的超時限制後,很快中斷的情況改善一些,但也沒有把全部升級執行完,後來臨時複制到一個單獨的庫中進行升級,與接受訪問的網站分離開才好
補充:繁體版訪問遇到apache日志中報錯:
PHP Notice: Undefined index: par2 in /includes/PathRouter.php on line 283
想了半天辦法,最後還是修改了PathRouter.php這個文件:
if(array_key_exists( "par{n}",$m ) ) {//jamesqi 2015-2-4
$value = rawurldecode( $m["par{$n}"] );
} else {
$value = '';
}
這樣就不報錯了
修改 includes/CategoryViewer.php 讓手機版分類頁面列表三列改為一列
if (substr($_SERVER['SERVER_NAME'],0,7) == 'mobile.') {//mobile $columns = array_chunk( $columns, ceil( count( $columns ) / 1 ), true /* preserve keys */ ); } else {//desktop $columns = array_chunk( $columns, ceil( count( $columns ) / 3 ), true /* preserve keys */ ); }
评论