-
Notifications
You must be signed in to change notification settings - Fork 1
Troubleshooting
按症状查。
| 症状 | 最可能的原因 | 去哪节 |
|---|---|---|
| 页面起来了但每张卡都是「未配置」 | 环境变量没读到(改完没重启 / 平台面板没重新部署) | ① |
| 只有某一家卡不出现 | 变量名拼错 / 成对凭据缺一半 / 多账号断号 | ② |
| 报「会话已失效」但 Cookie 刚复制过 | 本地 .env 里的 $ 被展开吃掉字符 |
③ |
| 平台面板拒绝保存变量 | 值里有空格 / 换行(整段 Cookie、echo 写入的 \n) |
④ |
| New API 填了 Token 却永远读不到数据 | 填的是 sk- 模型调用密钥而不是系统访问令牌 |
⑤ |
| 阿里云只出了半张卡 / 少一块区块 | 两块凭据是共存关系,删了 AK/SK 就丢两块数据 | ⑥ |
| Logo 配了但一直看不到 | 用了 http 地址(被按混合内容拦掉)或地址写错 | ⑦ |
| 站点名不见了 / 被截断 |
SITE_NAME 显式留空(只显示 Logo)、或太长被省略号截断 |
⑦ |
| 时间文案整体消失 | 视口 ≤1199px 时它下移到内容区顶部,这是设计如此 | ⑧ |
| 每次刷新都在打上游、额度查询很慢 | 关掉了服务端缓存 / 用的不是本项目部署 | ⑨ |
| 改了变量但线上没变化 | 部署产物在构建期固化配置,改面板值不会影响已运行的实例 | ⑩ |
这是未配置时的正常空态,不是错误 —— 页面在一条 Key 都没有时也应该能正常渲染。
排查顺序:
-
改完
.env是否重启了服务? 环境变量在进程启动时读取,热更新不生效。 -
变量名对不对? 逐字对照 配置参考 的表。
-
真的读到了吗? 打印长度自检:
bun -e 'console.log(process.env.DEEPSEEK_API_KEY?.length ?? "not set")' -
线上环境:变量注入了吗? 打开
/api/status看每家的configured。 EdgeOne 上还可以打开/api/diag,它会列出运行时已知的环境变量名 (Key/Secret 类只显示<set>)。 -
在平台上配的变量,改完有没有重新部署? 见 ⑩。
-
成对凭据缺一半:火山 / 阿里云 / 百度都需要
*_ACCESS_KEY_ID和*_SECRET_KEY同时存在。只配一半时整对会被丢弃 —— 表现为「卡片无声消失,也没有空态提示」。 -
多账号断号:编号必须连续,遇到缺口即停。
有
_1、_3却没有_2,后续组全部读不到。 -
字母大小写与下划线:
OPENCODE_GO_API_KEY有两个下划线;GITEE_AI_API_KEY不是GITEE_API_KEY。
几乎一定是本地 .env 的 $ 展开把值吃掉了。
这类 ticket 的值里含 $,未转义时会被 .env 加载器当作变量名、静默展开为空,
而且报错与真过期完全一致(都是 BailianGateway.Login.NotLogined)。
- 症状判据:报错里附带当前配置值的长度。明显偏短 → 就是这个问题。
- 修法:字面
$写成\$。加引号在两种加载器下都无效。 - 平台上相反:直接粘原值,不要加反斜杠。
长度一致也可能是旧值。 长度自检只能抓被吃掉的截断,抓不到「长度相同的旧值」。 怀疑没生效时,比对哈希而不是长度。
完整写法见 凭据与多账号 → Cookie 怎么填。
面板会报「变量值不能包含空格、换行、制表符等特殊字符」。两个来源:
-
整段
Cookie头(形如a=b; c=d)天生带分号与空格,面板必定拒绝。- 百炼:只粘
login_aliyunid_ticket的值,别粘整段。 - 模力方舟:必须用整段 → 先
encodeURIComponent再存(服务端会自动还原)。
- 百炼:只粘
-
用 CLI 写入时用了
echo:echo会附带回车换行。改用printf '%s'。
NEWAPI_TOKEN 要填的是系统访问令牌(个人设置 → 安全设置 → 系统访问令牌),
不是控制台里 sk- 开头的模型调用密钥。
两者都能通过站点鉴权,但权限不同。填成 sk- 时程序会自动降级到 OpenAI 兼容的
账单接口(/v1/dashboard/billing/*),读数仍然正确,但拿不到用户名与按模型明细 ——
表现为「卡片出来了但字段少一半」。
ALIYUN_ACCESS_KEY_ID / ALIYUN_SECRET_KEY 与 ALIYUN_TOKENPLAN_COOKIE
各管一块数据,互不替代:
- 删掉 AK/SK → 同时丢掉「Token 资源包」和「组织/座席」两块;
- 没配 Cookie → 「个人版套餐用量」处显示黄色提示;
- 只配 Cookie 也能用:个人版用量可独立查询,组织/座席区块自动隐藏。
对照表见 凭据与多账号 → 阿里云。
| 原因 | 判据与修法 |
|---|---|
用了 http:// 地址 |
在 https 页面上被按混合内容拦掉,表现为「配了却一直看不到」。必须 https |
| 地址写错 | 加载失败会自动降级:先换另一套主题的 Logo,都不行才退回纯文字。所以不会留破图 |
| 只配了明亮那套 | 暗黑模式会沿用 SITE_LOGO_URL。深色字标落在深色导航上会糊成一片,两套都配才完整 |
SITE_NAME 留空了 |
这是预期行为:显式留空 = 品牌位只显示 Logo。想显示默认名就删掉这一行 |
站点名被截成 LLM…
|
品牌位用省略号截断,不会把导航顶出视口。换个短点的名字 |
不受 CORS 限制:Logo 与 favicon 由浏览器直接加载,服务端既不代理也不读像素。
视口 ≤1199px 时,「更新于 / 下次刷新」会从导航行下移到内容区顶部 (手机原本就这么做)。实测 768 视口下导航行已无余量,站点名会被挤压成「AI…」。
所以窄屏下它只是换了位置,不是消失了。详见 配置参考 → 时间文案与断点。
本项目自带 TTL 缓存 + 单飞:命中缓存时上游调用为 0,并发刷新共享同一次上游请求。
- 余额 / 用量类 TTL 60 秒,结构 / 权益类(资源包、套餐、座席)300 秒。
- 默认刷新间隔 180 秒,所以按天计的那几项大约每两次自动刷新才真正打一次上游。
-
手动点「刷新」会绕过缓存(
?refresh=1)—— 这是故意的,手动刷新永远拿得到实时数据。
如果发现上游调用明显高于这个节奏,检查是不是把 REFRESH_INTERVAL_SECONDS 调得过小,
或者页面上有别的进程在打 /api/usage。
部署产物在构建期固化配置。 改面板上的值不会影响已经在跑的实例, 要触发一次新部署(或在面板点 Redeploy)。
例外:SITE_NAME / Logo / favicon / REFRESH_INTERVAL_SECONDS 这些站点自定义变量
由服务端在启动时读取并随 /api/status 下发 —— 这些重启服务即生效,不需要重新构建前端。
- 打开
/api/usage,看目标平台那一片切片里的error/code。 上游业务码比 HTTP 码信息量大 —— 401 也可能是「账号已停用」而不是「令牌错」。 - 打开
/api/status确认配置被服务端读到了。 - 还是定位不了就提 issue,附上
/api/usage里那一片切片的输出 (先把凭据相关的字符串打码)。