故障排除
本页面提供 Bun Expo Updates Server 可能遇到的常见问题及其解决方案。
常见错误和解决方案
服务器启动问题
"无法连接到 Redis" 错误
症状:服务器启动时显示 无法连接到 Redis 或 Connection refused 错误。
解决方案:
- 确认 Redis 服务正在运行:
- 检查
.env 文件中的 REDIS_URL 配置是否正确
- 确认网络防火墙没有阻止 Redis 连接
- 如果使用的是远程 Redis,检查认证信息是否正确
"地址已被使用" 错误
症状:启动服务器时显示 Address already in use 错误。
解决方案:
- 检查配置的端口是否已被其他进程使用:
- 更改
.env 文件中的 port 配置
- 终止占用端口的进程或选择不同的端口
"未找到私钥文件" 错误
症状:服务器启动时显示 未找到私钥文件 错误。
解决方案:
- 确认私钥文件存在于指定的路径:
ls -la code-sign-keys/private-key.pem
- 如果文件不存在,生成新的密钥对:
mkdir -p code-sign-keys
openssl genrsa -out code-sign-keys/private-key.pem 2048
openssl rsa -in code-sign-keys/private-key.pem -pubout -out code-sign-keys/public-key.pem
- 更新
.env 文件中的 PRIVATE_KEY_PATH 配置
更新管理问题
"找不到运行时版本目录" 错误
症状:上传更新时显示 找不到运行时版本目录 错误。
解决方案:
- 确认客户端项目路径配置正确:
echo $CLIENT_PROJECT_PATH
- 检查客户端项目的
app.json 或 app.config.js 文件是否包含 runtimeVersion 字段
- 手动创建运行时版本目录:
mkdir -p updates/your-runtime-version/$(date +%s)
更新未显示在应用中
症状:更新已成功上传,但客户端应用无法看到或下载更新。
解决方案:
- 检查客户端应用中配置的更新 URL 是否正确
- 确认客户端应用的运行时版本与服务器上的更新匹配
- 验证更新资源是否已成功上传到 OSS:
bun src/scripts/checkUpdateResources.ts
- 检查服务器日志,查找请求错误
- 确认更新文件的 MIME 类型设置正确
时间戳目录结构错误
症状:更新目录结构异常或符号链接失败。
解决方案:
- 手动修复目录结构:
cd updates/your-runtime-version/
rm -f latest
ln -sf your-timestamp latest
- 重新运行上传脚本:
- 检查文件系统权限
OSS 相关问题
"OSS 凭证错误" 问题
症状:上传更新到 OSS 时显示凭证错误或权限被拒绝。
解决方案:
- 检查
.env 文件中的 OSS 凭证:
- 确认凭证具有适当的权限(读写权限)
- 验证存储桶名称和区域配置
- 使用提供商的官方工具测试凭证
"上传超时" 问题
症状:上传文件到 OSS 时出现超时错误。
解决方案:
- 检查网络连接和带宽
- 对大文件使用分块上传
- 选择更靠近服务器的 OSS 区域
- 增加超时配置
MIME 类型错误
症状:文件上传到 OSS 后,MIME 类型不正确,导致资源无法正确加载。
解决方案:
- 使用
updateMime.ts 脚本修复 MIME 类型:
bun src/scripts/updateMime.ts
- 确认
helper-oss.ts 中的 MIME 类型映射正确
- 手动设置特定文件的内容类型
客户端应用问题
应用无法下载更新
症状:客户端应用报告无法下载或应用更新。
解决方案:
- 确认客户端应用有网络连接
- 验证更新 URL 配置正确
- 检查客户端运行时版本是否与服务器上的更新匹配
- 如果启用了代码签名,确保公钥配置正确:
{
"expo": {
"updates": {
"codeSigningPublicKeyBase64": "您的公钥(Base64编码)"
}
}
}
更新后应用崩溃
症状:应用下载并应用更新后崩溃。
解决方案:
- 检查更新包中 JavaScript 代码是否有错误
- 确认更新与当前运行时版本兼容
- 回滚到之前的稳定更新:
cd updates/your-runtime-version/
rm -f latest
ln -sf previous-stable-timestamp latest
- 检查客户端应用日志以获取详细错误信息
日志和调试
启用详细日志
要获取更详细的日志信息,设置环境变量:
DEBUG=true LOG_LANGUAGE=zh-CN bun run dev
检查服务器日志
服务器日志存储在 logs/ 目录中:
测试 API 端点
使用 curl 测试 API 端点:
# 测试清单端点
curl -H "expo-protocol-version: 1" \
-H "expo-platform: ios" \
-H "expo-runtime-version: 1.0.0" \
http://localhost:3001/api/manifest
# 测试健康检查
curl http://localhost:3001/health
常见问题(FAQ)
服务器在生产环境中需要哪些最低资源?
对于中小型应用(几千用户),建议:
- 1 CPU 核心
- 512MB 内存
- 连接到 Redis 实例
- 足够的磁盘空间来存储更新文件(或使用 OSS)
如何管理多个应用的更新?
每个应用应该使用不同的运行时版本标识符,确保它们的更新独立管理。您可以使用相同的服务器实例为多个应用提供更新。
可以在不重新发布应用的情况下更改更新服务器 URL 吗?
不可以,更新服务器 URL 是在构建时配置的,需要重新发布应用才能更改。
服务器支持回滚到特定版本吗?
是的,您可以通过更改"latest"符号链接指向特定的时间戳目录来实现回滚:
cd updates/your-runtime-version/
rm -f latest
ln -sf target-timestamp latest
如何监控服务器的健康状况?
- 定期检查
/health 端点
- 实现服务器指标监控(如 Prometheus)
- 设置日志分析和告警
- 监控 OSS 存储使用情况和配额
联系支持
如果您在解决问题时需要帮助,可以:
- 在 GitHub 仓库提交 Issue:https://github.com/isTrih/bun-expo-updates-server/issues
- 查阅 Expo Updates 协议文档