MediaWiki升级至1.35.0这事也不是今天第一次,之前在另外一台服务器(腾讯云)上小试了一把,没啥大问题。今天之所以升级心百科,是因为这几天一直在倒腾发送邮件的问题,结果不但没搞定还把可视化编辑器给整残了,一咬牙一跺脚干脆升级到1.35算了。结果问题接二连三地发生。

问题一 PHP版本太低

目前这台服务器在运行MediaWIki 1.34.1的时候,PHP版本为7.2.16,运行maintenance中的update.php提示,PHP版本必须为7.3.19+。OK,先升级PHP。
然后就是fileinfo的扩展以及禁用的函数()释放,总之满足基本安装要求。
所幸数据库之类的没有太大变化。

问题二 可视化编辑器error (77)

升级前是因为可视化编辑器,没想到升级后还是有问题。
visualeditor-cURL-error (77).png
不是说从1.35开始就不需要Parsoid服务了吗?怎么错误提示里还有Parsoid的字样?
从搜索的结果来看,主要是openssl的CA证书问题,下载并移动证书至指定目录:

wget https://curl.haxx.se/ca/cacert.pem && mv cacert.pem /etc/ssl/certs/

修改配置文件php.ini中的配置如下:

curl.cainfo="/etc/ssl/certs/cacert.pem"

PS:用Oneinstack一键安装的话,CA证书位于/usr/local/openssl下,文件名为cert.pem,所以可以通过上述方法下载到该目录后修改文件名。
问题三 可视化编辑器HTTP 404错误
再次尝试编辑,证书的问题消失了,然后又冒出新的问题来。
visualeditor-error-HTTP-404.png
从网上搜了一下貌似还不是个案,有很多网友都遭遇过,而且此问题不仅出现在升级也出现在全新安装的MediaWiki中。查看了一下之前腾讯云安装的配置文件,我已经删除了跟Parsoid相关的设置,唯一剩下的如下:

## 启用可视化编辑器
wfLoadExtension( 'VisualEditor' );

# 仅用单个编辑按钮
$wgVisualEditorUseSingleEditTab = true;
$wgHiddenPrefs[] = 'visualeditor-tabs';//是否禁用参数选项->编辑中的编辑模式选项

# 默认对所有用户启用
$wgDefaultUserOptions['visualeditor-enable'] = 1;

# Optional: Set VisualEditor as the default for anonymous users
# otherwise they will have to switch to VE
$wgDefaultUserOptions['visualeditor-editor'] = "visualeditor";

# 不允许用户禁用
$wgHiddenPrefs[] = 'visualeditor-enable';

# OPTIONAL: Enable VisualEditor's experimental code features
$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;

# 在条目、用户及主题中开启VisualEditor
$wgVisualEditorAvailableNamespaces = [
    NS_MAIN => true,
    NS_USER => true,
];

而可视化编辑器的使用一点问题都没有。为了证实Parsoid服务确实不需要,我还特地停止了该服务,一切顺利。可是为什么还是出错呢?
会不会是restbase的原因?答案显然也不是,腾讯云上的restbase我只是弄了个半吊子,连配置文件都没生成过。
注:对于restbase服务可以说是可有可无,它的作用是在可视化编辑器和源代码编辑器切换的时候能够保持修改内容的持续,也就是说如果你一直是使用可视化编辑器或者是一直使用源代码编辑器,不会来回切换是没有影响的(实在想切换也可以通过先保存再编辑的方式——当然就会多一条历史修改记录)。另外如果你要使用Math扩展,那也得用上restbase服务。
网上也有说要修改nginx配置的,不过我对比了一下两台服务,貌似差别不大。
我甚至都把VisualEditor重新下载了一遍以替换系统包内的扩展,结果还是一样的。

修复Parsoid服务

实在是没有办法可想了,都想快照回滚到升级之前的冲动。但是我之所以被迫升级也是因为可视化编辑器不工作,就算是退回到1.34版估计还是需要继续倒腾的。
从1.35开始,MediaWiki用php语言重写了Parsoid服务,只是它方便的地方,从此告别服务外挂。但是不代表它不能继续使用原来的Parsoid服务。
改回LocalSettings.php的配置内容,全力以赴排查之前的错误。

错误一:restbase服务项拼写错误

当初用手动方式启用了restbase服务,然后服务器一直就这么运行着,直到最近因为反复的快照回滚,服务器重启,导致restbase无法正常启动了。打开服务项中的配置,发现restbase少拼个字母,难怪死活启动不了。

错误二:SQLITE_READONLY错误

restbase服务会用到一个db.sqlite3数据库文件,系统对它的要求是可读写的,但是默认安装的时候并没有赋予这样的权限,所以虽然服务能够被激活和运行但是会报错,通过systemctl status restbase -l命令就能看到错误警告。

错误三:Parsoid配置错误

网站升级到https有很长一段时间了,但是config.yaml中仍然是以http打头的uri,会不会是这里出了问题?打开文件,又发现一个不该出现的错误,http后面我多打了一个斜杠——真不知道之前是怎么运行起来的。还是说在过程中被我误改了文件?

 # Configure Parsoid to point to your MediaWiki instances.
        mwApis:
        - # This is the only required parameter,
          # the URL of you MediaWiki API endpoint.
          uri: 'https://wiki.mindseed.cn/api.php'

以上问题解决后并启用Parsoid和RestBase服务后,打开网站点击编辑,可视化编辑器能够正常运行了。
好吧,至此升级1.35.0的工作就暂时告一段落。过两天回滚到升级前逐一验证上述错误,看看结果如何?至于1.35.0为什么没办法脱离Parsoid服务,等空闲了再试吧。

参考文档

Website on Plesk shows: cURL error (77): Problem with the SSL CA cert
curl: (77) Problem with the SSL CA cert (path? access rights?) with centOS on Plesk

最后修改:2020 年 12 月 01 日
如果觉得我的文章对你有用,请随意赞赏