2022年5月23日更新

新问题是在安装Citoid扩展时发现的,因为一运行该扩展,可视化浏览器就无法工作了。尝试用php update.php升级一下试试的时候,终端返回:

PHP Fatal error:  Uncaught Exception: Unable to open file vendor/wikimedia/parsoid/extension.json: filemtime(): stat failed for vendor/wikimedia/parsoid/extension.json in /……/includes/registration/ExtensionRegistry.php:185
Stack trace:
……
  thrown in /……/includes/registration/ExtensionRegistry.php on line 185

刚开始以为是parsoid的安装目录有问题(把wikimedia看成了mediawiki)才导致的,后来发现都在呢。找了一圈答案没有特别合适的,只能自己瞎捣鼓,原来问题出在第一条代码上,一般官方会写成:

$parsoidInstallDir = '$IP/vendor/wikimedia/parsoid'; 

不过该方法对我没用,没办法,只能硬解码地址,然后就正常了。

2022年5月21日原文

在使用结构式讨论的Flow扩展编辑话题后尝试保存,系统提示:

Caught exception of type Flow\Exception\WikitextException

然后切换到源码编辑器后,文本框中编辑的内容变成:

无法转移内容:连接用于wikitext与HTML之间转换的服务器时出错。请检查您的互联网连接,或如果问题持续,请稍后尝试。如果您仍然看到该错误,请提交错误报告

删掉上述内容,使用源码编辑器重新编辑话题内容后竟然保存成功了。
网上搜到有同样问题的朋友,他的解决办法就是直接采用源码编辑器。甚至官方讨论中也有类似的解决方案,通过修改参数$wgFlowEditorList,有说行也有说不行的,具体怎么设置我们就不去细究了,毕竟禁用其中一个对用户来说还是少了个选择,况且源码编辑器确实对很多人来说比较复杂。
那有没有两全其美的办法,能够自如地切换两种编辑器呢?官方文档中提到了要配置Parsoid服务,可是自从1.35以后可视化编辑器和Parsoid就内置了,变得开箱即用,总不能为了这个再去重新开启Parsoid服务吧?
试了一下可视化编辑器中给出的解决方案,添加如下代码:

$wgVirtualRestConfig['modules']['parsoid'] = array(
    // URL to the Parsoid instance.
    // You should change $wgServer to match the non-local host running Parsoid
    // Note! This is a server to server URL (it must be valid within your VM/container)
    // For a VM or docker this will probably be correct:
    // 'url' => "http://localhost/rest.php",
    'url' => $wgServer . $wgScriptPath . '/rest.php',
    // Parsoid "domain", see below (optional, rarely needed)
    // 'domain' => 'localhost',
);

可惜我没成功,直接404报错,如果替换另一条url的语句则提示id0错误。
进到Parsoid的文档页面,其中提到另一种方案,代码如下:

$parsoidInstallDir = 'vendor/wikimedia/parsoid'; # bundled copy
#$parsoidInstallDir = '/my/path/to/git/checkout/of/Parsoid';

// For developers: ensure Parsoid is executed from $parsoidInstallDir,
// (not the version included in mediawiki-core by default)
// Must occur *before* wfLoadExtension()
if ( $parsoidInstallDir !== 'vendor/wikimedia/parsoid' ) {
    // AutoLoader::registerNamespaces was added in MW 1.39
    AutoLoader::registerNamespaces( [
        // Keep this in sync with the "autoload" clause in
        // $parsoidInstallDir/composer.json
        'Wikimedia\\Parsoid\\' => "$parsoidInstallDir/src",
    ] );
}

wfLoadExtension( 'Parsoid', "$parsoidInstallDir/extension.json" );

# Manually configure Parsoid
$wgVisualEditorParsoidAutoConfig = false;
$wgParsoidSettings = [
    'useSelser' => true,
    'rtTestMode' => false,
    'linting' => false,
];
$wgVirtualRestConfig['modules']['parsoid'] = [
    // URL to the Parsoid instance.
    // If Parsoid is not running locally, you should change $wgServer to match the non-local host 
    // While using Docker in macOS, you may need to replace $wgServer with http://host.docker.internal:8080
    'url' => $wgServer . $wgScriptPath . '/rest.php',
    // Parsoid "domain", see below (optional, rarely needed)
    // 'domain' => 'localhost',
];
unset( $parsoidInstallDir );

如果使用nginx服务,记得添加如下代码:

location /w/rest.php/ {
    try_files $uri $uri/ /w/rest.php?$query_string;
}

如果你的短链接不是/w/$1而是/$1的话,去掉相应的/w即可。
刷新页面,重新进入到话题编辑中,这次无论怎么切换都没有问题了。

参考资料:
https://www.mediawiki.org/wiki/Extension_talk:StructuredDiscussions
https://www.mediawiki.org/wiki/Extension:StructuredDiscussions
https://www.mediawiki.org/wiki/Extension:VisualEditor
https://www.mediawiki.org/wiki/Parsoid

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