尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Zulip 升级失败后如何回滚到之前的版本
Zulip 升级失败后如何回滚到之前的版本【免费下载链接】zulipZulip server and web application. Open-source team chat that helps teams stay productive and focused.项目地址: https://gitcode.com/GitHub_Trending/zu/zulip在自托管的 Zulip 服务器上执行upgrade-zulip或upgrade-zulip-from-git升级时升级可能中途失败或者新版本虽然启动完成但行为异常。这时你需要把服务切回升级前的版本。本文针对用标准安装方式部署非 Docker的 Zulip 服务器利用部署目录与符号链接机制完成回滚并给出回滚后的验证方式Docker 部署的升级流程在 升级文档 中被单独引导至 Docker 章节不适用本文步骤。回滚机制部署目录与符号链接Zulip 的升级过程会在/home/zulip/deployments/下创建一个新部署其中包含 Zulip 服务器代码的完整副本并在升级过程中移动/home/zulip/deployments/{current,last,next}这三个符号链接upgrade.md。也就是说旧版本的完整代码树一直保留在/home/zulip/deployments/中回滚只需要重新启动对应目录里的版本。注意适用范围文档明确该回滚流程面向 minor release例如从9.4回滚到9.3。如果要降级到更早的 major release需要先回滚数据库迁移那是一个更复杂的过程。先确认升级在哪里失败升级脚本是幂等的idempotent解决问题后再次执行没有危害。因此在决定回滚之前先看一下日志判断能否快速修复升级脚本的全部输出记录在/var/log/zulip/upgrade.logZulip 服务器的 Internal Server Error 记录在/var/log/zulip/errors.log。文档列出的最常见原因有两类网络问题服务器没有稳定的互联网访问或没有配置代理。修复网络后直接重跑升级即可。使用upgrade-zulip-from-git时内存刚好达到运行 Zulip 最低要求的机器容易在升级过程中出现 out-of-memory通常失败的步骤是tools/webpack。可以先停掉 Zulip 服务释放内存再跑升级./scripts/stop-server在/home/zulip/deployments/current/目录下执行完整路径见 upgrade.md 中给出的scripts/stop-server用法。如果你能定位并修复原因直接重试升级如果短时间内无法定位可修复的原因或者新版本已经启动但你判断它工作不正常就执行下面的回滚。执行回滚回滚到上一个版本即升级前的版本运行/home/zulip/deployments/last/scripts/restart-server回滚到更早的某个版本时把路径换成对应部署目录/home/zulip/deployments/DATE/scripts/restart-server其中DATE是/home/zulip/deployments/下实际存在的部署目录名查看该目录的目录列表即可找到。restart-server会停止当前正在运行的 Zulip 服务器并启动你指定部署路径对应的版本upgrade.md。副作用是服务会停止并短暂不可用然后以旧版本重新拉起。从 restart-server 脚本源码 可以看到它还会在启动前执行./manage.py check --database default做语法和数据库检查并自动把current、last符号链接指向你回滚的版本脚本要求以zulip用户身份运行以root运行时会自动切换到zulip用户。验证回滚结果脚本成功跑完会输出Zulip restarted successfully!见 restart-server 末尾。用supervisorctl status检查各服务状态全部为RUNNING表示正常。如果出现非RUNNING状态、或某服务 uptime 不足 5 秒说明它在启动后立即崩溃并反复重启先查看/var/log/zulip/errors.log如果那里没有相关日志再查该服务在/etc/supervisor/conf.d/zulip.conf中配置的stdout_logfile日志只有在服务完全启动后才会进入errors.log这一点见 troubleshooting.md。确认当前指向的版本检查/home/zulip/deployments/current/version.py中的ZULIP_VERSION它反映回滚后正在运行的版本方法来自 modify.md。浏览器访问 Zulip 服务器 URL确认页面和收发消息恢复正常。限制与后续操作该回滚只适合 minor release 之间的降级跨 major release 降级需要先回滚数据库迁移文档将其描述为更复杂的过程。回滚本身不修复问题。修复失败原因后可以直接重跑升级脚本幂等重试无副作用。如果回滚后旧版本也无法正常启动或者升级前的部署目录已经缺失文档提供的兜底路径是恢复到完整备份升级前若已用/home/zulip/deployments/current/manage.py backup生成过备份可用/home/zulip/deployments/current/scripts/setup/restore-backup /path/to/backup恢复见 export-and-import.md。【免费下载链接】zulipZulip server and web application. Open-source team chat that helps teams stay productive and focused.项目地址: https://gitcode.com/GitHub_Trending/zu/zulip创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

Telegraf Merge 聚合器插件:按序列键合并多条指标为多字段指标

Telegraf Merge 聚合器插件:按序列键合并多条指标为多字段指标

Telegraf Merge 聚合器插件:按序列键合并多条指标为多字段指标 【免费下载链接】telegraf Agent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data. 项目地址: https://gitcode.com/GitHub_Trending/te/telegraf …

📅 2026/9/14 6:25:43
RBF神经网络PID自整定控制:MATLAB实现与梯度下降参数优化

RBF神经网络PID自整定控制:MATLAB实现与梯度下降参数优化

简介:这是一份基于RBF神经网络优化PID控制器的MATLAB实现资源,适合自动化、智能控制方向的学生与工程师用于理解径向基函数与PID参数自整定结合的方法。资源包内只有1个m文件,整体大小约1KB,代码量精简,便于逐行阅读和…

📅 2026/9/14 6:20:42
C++安全编程:防御性编程与内存安全实践

C++安全编程:防御性编程与内存安全实践

1. C安全编程概述 在当今软件开发领域,安全编程已经从"可有可无"变成了"必不可少"的核心技能。作为系统级编程语言的代表,C因其直接操作内存的能力而备受青睐,但这也带来了诸多安全隐患。缓冲区溢出、内存泄漏、整数溢出…

📅 2026/9/14 6:20:42
MORE NEWS

更多资讯

📰

MATLAB图像分割算法实战:从阈值到活动轮廓的完整指南

简介:这是一份面向图像分割方向学习者及初/中级开发者的MATLAB程序源码包,基于MATLAB实现图像分割功能,代码从图像读取、预处理、算法处理到结果输出均有覆盖,并包含自动分割、交互式前景背景选取、Graph Cut图割分割等经典方法&a…

📰

华为eNSP实验:DHCP Option 43配置与AP上线排查实战

做无线项目最怕什么?不是AP本体故障,而是AP拉到现场上电之后,一直卡在“未注册”状态。AC那边display wlan ap all刷了半天,一片空白;AP这边反复重启,怎么都起不来。翻配置、查VLAN、测路由,折腾…

📰

虚拟线程Pinning深度解析:从JDK 21到JDK 24的修复之路

去年年底我把一个内部服务从平台线程切到虚拟线程,改动量不大,压测一开始特别爽——几千并发直接挂住,吞吐量数字很漂亮。大概跑了三分钟,整个服务突然像被冻住一样,请求超时率飙升,进程的线程数量却一直往…

📰

context-mode:SQLite+FTS5+BM25驱动的AI上下文动态注入范式

1. “context-mode”不是功能开关,而是智能体与数据交互的新范式最近在多个技术社区和开源项目文档里反复看到context-mode这个词——它既不像传统 CLI 工具里的--verbose或--dry-run那样直白,也不像 Web 框架里的 middleware 那样有明确的执行链路。它不…

📰

Spring Session + Redis 分布式会话管理:原理、实操与故障排查

Session 这个东西,说实话单机部署的时候几乎没有人会去正眼看它,容器帮你把 Request 和 Session 绑得死死的,你在 Controller 里request.getSession()拿得理所当然。可一旦服务拆成多节点、流量一上来,第一个爆雷的往往就是它——…

📰

开源AI运维Agent:告警自动闭环的工程实践

1. 这不是又一个“AI喊你起床”的玩具,而是一套能真正接管告警响应链路的开源运维Agent“开源 AI 运维 Agent,告警来了不用半夜扒面板”——这句话我第一次看到时,下意识点开链接想验证是不是营销话术。结果在 GitHub 上翻了三天源码、搭了两…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬