NextCloud 故障处理两则
则一:Configuration was not read or initialized correctly
今天下午更新 NextCloud:30.0.0 版本,在执行 occ 更新时,碰到了 「Configuration was not read or initialized correctly」 的错误,具体如下:
[root@cdc_ncapp NextCloud]# docker exec --user www-data nextcloud-app php /var/www/html/occ upgrade
Nextcloud or one of the apps require upgrade - only a limited number of commands are available
You may use your browser or the occ upgrade command to do the upgrade
Setting log level to debug
In Config.php line 253:
Configuration was not read or initialized correctly, not overwriting /var/w
ww/html/config/config.php
upgrade
[root@cdc_ncapp NextCloud]#
其实它这个告警是挺让人莫名其妙的,因为是使用 docker compose 进行部署,配置啥的都没改过。并且这个报错有个 「or」,我怎么知道是权限问题还是配置问题。说是配置问题,配置没动过,说是权限问题,777 也问题依旧。
最后实在是被折腾得没辙了,就下了它的源码来分析错误,一看简直了,判断语句如下:
if (!is_file(\OC::$configDir . '/CAN_INSTALL') && !isset($this->cache['version'])) {
throw new HintException(sprintf('Configuration was not read or initialized correctly, not overwriting %s', $this->configFilePath));
}
只能说毫无逻辑可言了,判断目录下是否存在 」CAN_INSTALL「 文件(空文件),以及变量里面是否存在 「version」,任意不满足的,就返回 「config.php」 文件无法读取或配置错误?行吧,你说是就是吧。在确认 「CAN_INSTALL」 文件存在,以及在 「config.php」 文件里面加入 「'version' => '',
」后,该问题得以解决。
则二:Updates between multiple major versions and downgrades are unsupported.
这个其实也是莫名其妙的,我只升了1个3级小版本,就说我跨版本升级……可能是上一个问题调试的时候,动到了某根神经吧。原因查不到,解决还不容易吗?正好下载了源码,搜搜就是。具体判断语句如下:
if (!$this->isUpgradePossible($installedVersion, $currentVersion, $allowedPreviousVersions)) {
throw new \Exception('Updates between multiple major versions and downgrades are unsupported.');
}
先不管那些个变量代表什么吧,既然确认了不是跨版本升级,直接屏蔽这个判断就是。
登录主机,找到 "/安装目录/nextcloud/html/lib/private/Updater.php
" 文件,将以上三行语句屏蔽掉,保存即可:
# if (!$this->isUpgradePossible($installedVersion, $currentVersion, $allowedPreviousVersions)) {
# throw new \Exception('Updates between multiple major versions and downgrades are unsupported.');
# }
则三:注意保存
其实没有则三,只是为了提醒大家,任何操作前,都要注意保存好已有数据,避免因小障酿大错。