当前位置

MediaWiki从1.16.0升级到1.23.5遇到的问题

James Qi 在 2014年10月13日 - 11:25 提交

  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 */ );
}

 

自由标签:

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。