前情提要
Arcaea中文维基 时常出现无法正常访问的情况,经查云服务器CPU占用比异常,发现IDC所出售的机子有可能出现超售情况,遂打算将站点整体迁移至之前 Rotaeno中文维基 所使用的在国内托管的独立物理服务器主机(使用Windows Server系统)上。
迁移时,为保证原有配置能兼容且不需要繁琐的配置,我使用 Hyper-V 单独配置了一台采用 Ubuntu Server 22.04 LTS 系统的虚拟机来单独搭建了一套 LNMP 环境,并将母机上的 nginx 采用反向代理的方式链接至虚拟机。
事实证明,在 Ubuntu Server 下跑 MediaWiki 确实不会出现什么问题,根据官方的升级手册步骤一步步安装后,整个Arcaea中文维基轻松的在新环境跑了起来,且访问速度得到了大幅度的提升。
引入问题
实际上,在两个月前,母机的固态硬盘因为读写次数达到寿命上限锁只读了。
没办法,只好购买了一块新的企业级6.4T固态替换,替换后系统盘环境全部需要重新配置。
当时运行在母机上的Rotaeno中文维基使用的 MediaWiki 核心还是1.38的版本,在导入文件重新安装后可视化编辑就一直处于不可用的状态。尝试了多种解决方案后依旧无法正常解决,遂打算安装新版的 MediaWiki 来修复问题。
正好Arcaea中文维基迁移后顺带更新至了 MediaWiki 1.39 LTS 这个版本,插件和MW本体都在主机上下载好了,于是就按照升级手册对Rotaeno中文维基进行升级。
升级成功后,大部分功能都重新跑了起来,但在随机逛了几个页面后便发现了不对劲之处。
Lua错误:内部错误:解释器已退出,状态为1。
尝试解决
根据Scribunto插件文档,尝试配置了lua可执行文件的绝对路径
$wgScribuntoEngineConf['luastandalone']['luaPath'] = '/path/to/binaries/lua5.1';
随后还尝试了设置目录权限,看起来问题并没有解决,于是配置启用了errorFile。
$wgScribuntoEngineConf['luastandalone']['errorFile'] = '/path/to/file.log';
观察到log内容如下图所示。
发现均为目录导致的问题。log内容显示,在配置路径前,log中路径在开头部分出现了两个多余的双引号。
在插件文档里反复查阅,发现在Windows环境下也有人出现过类似的问题,并提出过解决方案
根据其说明,我在 \Scribunto\includes\engines\LuaStandalone\
目录下找到了 LuaStandaloneInterpreter.php
文件中对应的那几行:
看起来,代码的本意是在 Windows 环境下对命令两端添加双引号,但实际运行时只有前端正确的添加了双引号。
将 $cmd = '"' . $cmd . '"';
这段代码注释掉后,Scribunto的lua解释器便恢复了正常调用运行。
结语
建站别用Windows…