十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Zulip 开发环境 WSL 重建指南:从注销发行版到快速重建数据库

Zulip 开发环境 WSL 重建指南:从注销发行版到快速重建数据库 Zulip 开发环境 WSL 重建指南从注销发行版到快速重建数据库【免费下载链接】zulipZulip server and web application. Open-source team chat that helps teams stay productive and focused.项目地址: https://gitcode.com/GitHub_Trending/zu/zulipZulip 的官方推荐开发方式是在 Windows 上使用 WSL 2 运行 Linux 子系统在内部完成依赖安装、数据库初始化与服务编排。本文面向使用 WSL 2 的 Zulip 开发者讲解当开发环境损坏或需要验证 provisioning 流程修改时如何通过wsl --unregister彻底销毁并重建发行版以及当只需要重置开发数据库时如何用./tools/rebuild-dev-database在数分钟内完成恢复。读完本文你将掌握 WSL 下 Zulip 开发环境的完整重建链路并理解其底层脚本执行了什么操作。什么时候需要重建开发环境Zulip 开发环境由 provisioning 流程./tools/provision一次性搭建负责安装系统依赖、创建 Python 虚拟环境、初始化 PostgreSQL 数据库与填充测试数据。绝大多数情况下你并不需要重建它——日常只需要通过./tools/provision增量更新或者用./tools/rebuild-dev-database重置数据库。但在以下场景中从零重建整个 WSL 发行版是更稳妥的选择你修改了 provisioning 流程本身需要验证改动是否能在全新环境下正常工作你认为当前环境中的某些组件如node、rabbitmq-server等系统级软件被污染或损坏且无法定位具体原因WSL 发行版内的软件与你此前安装的其他软件发生冲突这也是官方推荐为 Zulip 单独创建全新 WSL 实例的原因详见 docs/development/setup-recommended.md 的 Windows 安装说明。值得强调的是重建整个 WSL 发行版是核武器级别的操作它会删除发行版内的一切文件与配置。如果你只是想清理代码仓库或重置数据库应先考虑下文介绍的轻量方案。第一步确认要删除的发行版名称在开始任何删除操作之前必须先准确识别你的发行版名称。打开 Windows 的命令提示符Command Prompt或 PowerShell执行$ wsl --list --verbose该命令会以列表形式展示本机所有已安装的 WSL 发行版、它们的运行状态Stopped/Running以及 WSL 版本1 或 2。如果你安装了多个发行版输出大致如下NAME STATE VERSION * Ubuntu-22.04 Stopped 2 Ubuntu Running 2其中星号*标记的是默认发行版。如果你不确定哪个发行版承载着 Zulip 开发环境可以先登录进去确认wsl -d Distribution Name进入发行版后检查~/zulip目录是否存在、是否包含.venv等 Zulip 环境标志确认无误后执行exit退出。这一步可以有效避免误删其他工作环境的发行版。第二步注销卸载WSL 发行版确认名称后执行$ wsl --unregister Distribution Namewsl --unregister会立即且不可逆地删除整个发行版包括其中全部文件系统数据home 目录、安装的软件、数据库等并从 WSL 的已安装发行版列表中移除该条目。这是 WSL 内置的卸载发行版标准命令与在 Microsoft Store 中删除发行版应用的卸载行为不同——unregister连根删除的是发行版实例本身。执行完毕后发行版处于未注册状态。下一步需要重新安装发行版例如重新执行wsl --install -d Ubuntu或从 Microsoft Store 安装然后从零开始安装 Zulip 开发环境。有关 WSL 命令的更多细节可参考微软官方文档中关于 unregister/uninstall 一节docs/development/setup-recommended.md 的 Windows 安装小节同样提供了 WSL 卸载说明。第三步重新执行完整安装流程发行版注销并重装后Zulip 开发环境需要重新搭建。请严格按照官方推荐流程执行完整步骤见 docs/development/setup-recommended.md核心链路如下安装系统依赖官方推荐在全新 WSL 实例上操作避免与旧软件冲突$ sudo apt update sudo apt upgrade $ sudo apt install rabbitmq-server memcached redis-server postgresql配置 RabbitMQ 仅监听本机地址编辑/etc/rabbitmq/rabbitmq-env.conf确认文件末尾包含以下两行NODE_IP_ADDRESS127.0.0.1 NODE_PORT5672在 WSL 发行版磁盘内而非 Windows 挂载盘克隆 Zulip 仓库并确保 WSL 2 已启用systemd用于管理数据库、缓存等后台服务运行 provisioning 与启动开发服务器$ ./tools/provision $ source .venv/bin/activate $ ./tools/run-dev其中./tools/provision是重建环境的关键入口它负责安装依赖并初始化数据库。从源码结构看provisioning 会调用 tools/rebuild-dev-database 来创建带完整 schema 的开发数据库docs/overview/architecture-overview.md 中明确说明tools/provision会调用tools/rebuild-dev-database并经由 tools/postgresql-init-dev-db 完成开发用 PostgreSQL 用户与扩展的初始化。如果你在重建后运行./tools/run-dev仍遇到报错通常重跑一遍./tools/provision即可解决大部分环境问题。轻量替代方案只重建开发数据库大多数情况下你并不需要注销整个发行版。如果你只是把开发数据库搞坏了例如在调试 migration 时执行了错误操作或想验证数据库恢复到初始状态官方提供了快得多的方式$ ./tools/rebuild-dev-database该脚本的作用是彻底删除开发数据库并以模板数据库重新创建、应用全部迁移、重新填充示例数据。其内部执行步骤见 tools/rebuild-dev-database 的源码如下终止占用中的数据库连接先以PGHOSTlocalhost PGUSERzulip调用 scripts/setup/terminate-psql-sessions通过pg_terminate_backend强制断开zulip与zulip_base两个库上除自身以外的所有活动会话避免数据库正被占用导致的删除失败重建数据库执行 SQL 删除旧库并以zulip_base为模板创建新库DROP DATABASE IF EXISTS zulip; CREATE DATABASE zulip TEMPLATE zulip_base;借助 PostgreSQL 的TEMPLATE机制新库可以瞬间获得与模板库完全一致的初始 schema这是脚本高效的关键刷新缓存与队列调用 scripts/setup/flush-memcached 清空 memcached默认缓存后端为SingletonBMemcached再执行./manage.py purge_queue --all清空 RabbitMQ 中的全部待处理队列防止旧数据残留应用迁移并同步状态执行./manage.py migrate --noinput应用所有尚未应用的 migration随后用./manage.py get_migration_status将迁移状态写入migration_status_dev文件供后续自动检测迁移变更使用重建缓存表与填充示例数据执行./manage.py createcachetable third_party_api_results重建第三方 API 缓存表并用./manage.py populate_db -n100 --threads1向新库填充 100 个用户等示例数据用于人工测试同步 API Key若~/.zuliprc存在则执行./manage.py sync_api_key将本地用户的 API Key 与配置文件保持一致。整个脚本启用了set -e与set -x任何一步失败都会立即终止并在终端打印详细执行轨迹方便排查。配套知识测试数据库的重建如果你在开发或调试的是自动化测试用数据库test-backend使用的zulip_test应使用对应的重建脚本$ ./tools/rebuild-test-database从 tools/rebuild-test-database 的源码可以看到它与开发库重建的差异脚本会导出DJANGO_SETTINGS_MODULEzproject.test_settings重建zulip_test、zulip_test_base与zulip_test_template三个数据库填充 30 个用户populate_db --test-suite -n30并在结束时将库数据 dump 为 zerver/tests/fixtures/messages.json 作为测试夹具最后再创建一个干净的zulip_test_template模板库供测试结束后快速恢复初始状态。开发库与测试库彼此独立——你在 UI 中人工修改开发库数据不会影响自动化测试反之亦然docs/development/using.md。迁移开发中的常见场景何时重建、何时迁移文档 docs/subsystems/schema-migrations.md 的 Local schema rebuilds 一节给出了权威指引正常情况下tools/provision与tools/test-backend会自动检测 migration 声明是否变化并相应执行./manage.py migrate或自动重建相关数据库无需手工干预manage.py migrate通过post_migrate信号以及重启./tools/run-dev都会自动刷新 memcached因此不必担心读到旧 schema 的缓存对象如果你在编写 migration 调试过程中把数据库弄坏了才需要手工重建开发库用./tools/rebuild-dev-database测试库用./tools/rebuild-test-database。此外docs/development/using.md 也提醒想将开发环境的数据库恢复到初始pristine状态直接运行./tools/rebuild-dev-database即可该工具与更多开发工具的使用说明还可通过开发服务器首页https://localhost:9991/devtools查看。常见问题与注意事项误删发行版怎么办wsl --unregister不可恢复且删除的是整个发行版实例。若想保留代码改动重建前应先将 WSL 内的工作提交并推送到远端仓库或在 Windows 侧备份文件在 Windows 挂载盘上执行 provisioning 会失败官方要求在 WSL 磁盘内如cd ~操作 Zulip 仓库否则会因文件权限问题导致./tools/provision报错详见 docs/development/setup-recommended.md重建后服务起不来优先重跑./tools/provisionWSL 2 需要启用systemd否则数据库、缓存等服务无法被正确管理只想重启环境而非重建WSL 2 下关闭终端即算停止环境也可以用 PowerShell 执行wsl --terminate environment_name终止指定发行版再次打开终端即可恢复开发docs/development/setup-recommended.md。小结面向 WSL 2 的 Zulip 开发环境重建共有两条路径彻底重建wsl --list --verbose确认 →wsl --unregister注销 → 重装发行版 → 重跑安装流程适用于环境被污染或需要验证 provisioning 修改的场景轻量重建./tools/rebuild-dev-database则能在保留发行版的前提下通过以模板库重建 迁移 重新填充示例数据在数分钟内把开发数据库恢复如初。理解这两者的适用边界与底层脚本行为可以让你在 Zulip 日常开发中避免不必要的环境重装也能在真正需要时从容完成重建。【免费下载链接】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),仅供参考
返回列表