Redis Flushall

分享此信息,以防其他人在管理面板中看到“正在更新”的提示,但实际上并无更新在进行,且论坛其他方面运行正常时有所帮助。

虽然这从未影响 Docker 管理器的更新,但在过去几个版本中,我不得不通过命令行界面(CLI)进行更新,因为管理面板始终显示 Discourse 正在更新。

我的论坛规模较小,没有自定义插件。

解决该问题的方法是清除 Redis 缓存。

虽然无法透露根本原因,但达到我对 Discourse 更新流程知识和理解的上限确实令人非常沮丧(这不是抱怨,而是坦诚承认)。

在此之前,重建应用(rebuild app)一直是解决几乎所有问题的可靠方法。

Redis 还存储用户会话以及更多内容。完全清空 Redis 会导致所有用户登出,并删除所有待处理的 Sidekiq 任务。已排期的任务仅会在下次重启后恢复。

这应仅作为最后手段,即便如此,我也建议您先查明具体是哪个键导致问题,而不是直接执行 flushall。这就像为了消灭一只老鼠而将整个建筑付之一炬。

能否改为重启 Redis?我认为它是一个内存数据库,因此服务器重启后不会保留任何数据。而且服务器重启不会造成数据丢失(并且可能随时发生)。

这是不正确的。Redis 确实会将数据持久化到磁盘。

感谢您的真知灼见和专业经验。

我尝试过的方法:

通过管理面板进行更新(失败/从未启动)

按照手动更新 Discourse 的步骤操作(在过去三个版本中)

进行了多次启动器应用的重建。

在论坛中搜索了类似的问题和解决方案。

最后求助于 ChatGPT 查询,虽然 ChatGPT 本身认为这不太可能修复问题(并建议了我已经尝试过的方法),但它却揭示了 Redis 相关的选项。

正是这一操作解决了问题。

我理解这个类比。

作为替代方案,我本还可以做些什么来更好地理解和解决这个问题?

为了明确起见,您发现

cd /var/discourse
git pull
./launcher rebuild app

对您不起作用?(具体在哪些方面不起作用?这是标准安装吗?)

未执行 git pull,但已重新构建启动器应用。

该过程运行正常,只是管理面板一直认为更新仍在进行中,未清除该状态。

谢谢——所以你的观察是管理面板更新对你不起作用。另外,它有一段时间对我也不起作用了!如果能正常工作就更好了。

我更喜欢命令行更新,但这次我在 iPhone 15 上通过界面完成了 Docker 和 Discourse 的更新,效果相当不错(在 DigitalOcean 上的标准安装)。

我通常会在其中一台电脑上全部通过命令行操作,因为上次尝试界面更新时失败了(那是几个月前的事,所以我最终还是得通过 SSH 登录)。

free -h 返回什么?

app.yml 中的 UNICORN_WORKERS 设置为什么?

app.yml 中的 db_shared_buffers 设置为什么?

app.yml 中的 db_work_mem 是否被注释掉了?

你的服务器有多少个(虚拟)CPU?

Free -h 显示:总内存 3.8Gi,已用 1.7Gi,空闲 134Mi,共享 1.0Gi,缓冲/缓存 2.0Gi,可用 788Mi

交换空间 2.0Gi,已用 290Mi,空闲 1.7Gi

UNICORN_WORKERS: 4

db_shared_buffers 1GB

db_work_mem 已被注释,设置为 40MB

我正在运行一个 2 vCPU 4GB RAM 的实例。

感谢提问!:smiley: