create-zleap-app 0.10.4 → 0.10.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +3 -0
- package/package.json +3 -3
- package/skills/zleap-cloud-app/SKILL.md +3 -3
- package/skills/zleap-cloud-app/references/app-runtime.md +3 -3
- package/skills/zleap-cloud-app/references/cloud-functions.md +25 -18
- package/skills/zleap-cloud-app/references/console-members.md +8 -16
- package/skills/zleap-cloud-app/references/limits.md +27 -36
- package/skills/zleap-cloud-app/references/manifest.md +26 -58
- package/skills/zleap-cloud-app/references/permissions.md +21 -21
- package/skills/zleap-cloud-app/references/sdk-database-files.md +12 -10
- package/skills/zleap-cloud-app/references/status-codes.md +117 -136
- package/skills/zleap-cloud-app/references/triggers.md +4 -4
- package/skills/zleap-cloud-app-release/SKILL.md +39 -82
- package/skills/zleap-cloud-app-release/references/app-center-install.md +22 -23
- package/skills/zleap-cloud-app-release/references/app-center-publish.md +56 -142
- package/skills/zleap-cloud-app-release/references/console-functions.md +12 -28
- package/skills/zleap-cloud-app-release/references/console-members.md +8 -16
- package/skills/zleap-cloud-app-release/references/console-release.md +18 -24
- package/skills/zleap-cloud-app-release/references/console-workspace.md +23 -90
- package/skills/zleap-cloud-app-release/references/dev-to-production.md +79 -349
- package/skills/zleap-cloud-app-release/references/permissions.md +21 -21
- package/skills/zleap-cloud-app-release/references/status-codes.md +117 -136
- package/templates/react-ts/scripts/zleap.mjs +14 -0
- package/templates/react-ts/src/cloud/client.ts +3 -3
- package/skills/zleap-cloud-app-release/references/console-legacy-release.md +0 -411
|
@@ -79,7 +79,7 @@ const db = zl.cloud.database();
|
|
|
79
79
|
|
|
80
80
|
> **为什么用 `DYNAMIC_CURRENT_ENV`**(提示)
|
|
81
81
|
>
|
|
82
|
-
> 数据域(dev / prod)是「部署 + 当前用户 +
|
|
82
|
+
> 数据域(dev / prod)是「部署 + 当前用户 + 应用有没有生产环境」决定的:开发数据域默认只对开发团队(应用成员)开放;
|
|
83
83
|
> 部署开放生产后其他使用者都用 prod,发布者本人在应用有了生产环境后也用 prod。
|
|
84
84
|
> 应用自己判断不了,所以传哨兵 `DYNAMIC_CURRENT_ENV`,由宿主在握手时替你解析成具体值。
|
|
85
85
|
> 写死 `'dev'` 或 `'prod'` 时,如果那不是当前对你开放的数据域,打开会话会被拒绝。
|
|
@@ -113,12 +113,12 @@ const caps = await zl.cloud.os.ready();
|
|
|
113
113
|
数据库 / 文件相关的 profile 或操作符缺失抛 `UNSUPPORTED_OPERATION`;后台执行(`app-execution/1`)缺失抛 `BACKGROUND_CAPABILITY_UNAVAILABLE`(旧 SDK 才是 `UNSUPPORTED_OPERATION`)。
|
|
114
114
|
服务端只在条件满足时下发 profile(`zleap-service/internal/services/cloudauthority/runtime_session.go`):
|
|
115
115
|
|
|
116
|
-
| Profile | 解锁的 API | 服务端下发条件
|
|
117
|
-
| ------------------ | ------------------------------------------------------------------------ |
|
|
118
|
-
| `document-core/1` | `get` / `count` / `add` / `set` / `update` / `remove` / `operations.get` | 数据库已就绪、Manifest 的 `data.collections` 非空、已授予 `cloud.database.read` 或 `write`(`data.schemas` 可选,不写就是灵活集合)
|
|
119
|
-
| `watch-snapshot/1` | `watch()` | 在上一条基础上,声明并授予了 `cloud.database.read`
|
|
120
|
-
| `storage-object/1` | `uploadFile` / `downloadFile` / `deleteFile` / `os.files.*` | 部署启用了对象存储、授予了 `cloud.storage.read` 或 `write`;生产数据域还要求当前安装绑定了已就绪的签名发布
|
|
121
|
-
| `app-execution/1` | `callFunction` / `os.capabilities` / `os.jobs` |
|
|
116
|
+
| Profile | 解锁的 API | 服务端下发条件 |
|
|
117
|
+
| ------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
118
|
+
| `document-core/1` | `get` / `count` / `add` / `set` / `update` / `remove` / `operations.get` | 数据库已就绪、Manifest 的 `data.collections` 非空、已授予 `cloud.database.read` 或 `write`(`data.schemas` 可选,不写就是灵活集合) |
|
|
119
|
+
| `watch-snapshot/1` | `watch()` | 在上一条基础上,声明并授予了 `cloud.database.read` |
|
|
120
|
+
| `storage-object/1` | `uploadFile` / `downloadFile` / `deleteFile` / `os.files.*` | 部署启用了对象存储、授予了 `cloud.storage.read` 或 `write`;生产数据域还要求当前安装绑定了已就绪的签名发布 |
|
|
121
|
+
| `app-execution/1` | `callFunction` / `os.capabilities` / `os.jobs` | 当前安装有已启用的后台能力授权(在应用窗口「权限」里勾选了后台能力;发布绑定由平台自动完成);缺失时抛 `BACKGROUND_CAPABILITY_UNAVAILABLE` |
|
|
122
122
|
|
|
123
123
|
```js
|
|
124
124
|
const { profiles } = await zl.cloud.os.ready();
|
|
@@ -386,7 +386,9 @@ off(); // 取消订阅
|
|
|
386
386
|
- 回调**只带变更坐标,不带文档内容**——收到后用 `get` / `watch` 重读;
|
|
387
387
|
- 只会收到**本集合**的变更(一个订阅覆盖应用所有集合,SDK 按 `collection_key` 过滤);
|
|
388
388
|
- 推送是**协商可选**的:宿主没有推送能力、或还没 `init` 时返回一个空的取消函数,回调永远不会触发。
|
|
389
|
-
所以**保留一个低频的 `watch` / `get`
|
|
389
|
+
所以**保留一个低频的 `watch` / `get` 兜底是安全的**,不要假设一定有实时通知;
|
|
390
|
+
- 时延:写入确认后平台立即转发,通常 1 秒内到达;平台繁忙时退回定时转发,可能延迟到几十秒。
|
|
391
|
+
自己写入后要马上看到结果的,直接用写入返回值或重读,不要等 `onChange`。
|
|
390
392
|
|
|
391
393
|
### 不支持的方法
|
|
392
394
|
|
|
@@ -612,9 +614,9 @@ async function saveTodo(data) {
|
|
|
612
614
|
}
|
|
613
615
|
```
|
|
614
616
|
|
|
615
|
-
>
|
|
617
|
+
> **绑定新发布后的会话失效**(提示)
|
|
616
618
|
>
|
|
617
|
-
>
|
|
619
|
+
> 安装切换到另一个版本并绑定新的发布后,旧会话会收到 `RELEASE_UNAVAILABLE`。宿主会自动重开会话并**重试一次**,
|
|
618
620
|
> 多数情况下应用无感。若仍失败,请用户重新打开应用。
|
|
619
621
|
|
|
620
622
|
## 后台执行与能力调用
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
| 字段 | 含义 |
|
|
40
40
|
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
41
41
|
| `code` | 业务码,按段位归类:401xx 认证、403xx 拒绝、404xx 不存在、409xx 冲突、422xx 参数、429xx 超限、503xx 未就绪/暂不可用、50000 内部错误 |
|
|
42
|
-
| `message` |
|
|
42
|
+
| `message` | **给人看的中文说明**。数据服务、发布等错误会说清具体原因,容量类会带上数字(如「本应用文档总数:已用 9800,上限 10000」) |
|
|
43
43
|
| `data.reason` | **稳定的原因码**,程序据此分流(本页各表格里的码) |
|
|
44
44
|
| `data.next_action` | **下一步做什么**(2026-10 新增),只有能由使用者自己处理的错误才带 |
|
|
45
45
|
| `data` 其他字段 | 定位信息:`operation`、`operation_id`、`layer`,容量类的 `quota` / `used` / `limit`,查询类的 `scan_limit` / `suggested_index`,限流的 `app_concurrency_limit` |
|
|
@@ -112,36 +112,36 @@
|
|
|
112
112
|
|
|
113
113
|
### 通道与调用
|
|
114
114
|
|
|
115
|
-
| 错误码 | 含义 | 可重试 | 处理
|
|
116
|
-
| ----------------------------------- | --------------------------------------------------------------------------------- | ------ |
|
|
117
|
-
| `COMMIT_UNKNOWN` | **写操作结果未知**(写请求 30 秒未返回等) | ✅ | **用原 `operationId` 查回执**,确认前不要换编号重新写
|
|
118
|
-
| `CALL_TIMEOUT` | 读请求 30 秒未返回 / 握手 15 秒未完成 / 作业等待超时 | ✅ | 可重试;带 `jobId` 时用 `jobs.wait` 继续等
|
|
119
|
-
| `RUNTIME_UNAVAILABLE` | 通道已关闭或服务暂不可用 | ✅ | 稍后重试;页面卸载后通道不可再用
|
|
120
|
-
| `APP_RATE_LIMITED` | 本应用此刻并发请求过多(单应用并发槽被占满) | ❌\* | 稍后重试;不要立刻循环重试
|
|
121
|
-
| `RESOURCE_EXHAUSTED` | 超出限制(并发 >8、分页/排序/大小上限、配额) | — | 对照 [限制](limits.md) 调整;配额类需清理数据
|
|
122
|
-
| `REQUEST_TOO_LARGE` | 请求体超过协商上限(默认 256 KiB) | ❌ | 拆分请求
|
|
123
|
-
| `IDEMPOTENCY_CONFLICT` | 同一请求编号被重复使用,或同一操作编号用于不同内容 | ❌ | 新请求用新编号;重试同一写入时内容必须完全相同
|
|
124
|
-
| `OPERATION_EXPIRED` | 操作编号超出首次使用窗口(300 秒)或回执已过期 | ❌ | 重新读取最新状态后,用新编号发起
|
|
125
|
-
| `PROTOCOL_MISMATCH` | SDK 与宿主协议不一致,或响应结构异常 | ❌ | 使用与当前 OS 匹配的 SDK 版本
|
|
126
|
-
| `BACKGROUND_CAPABILITY_UNAVAILABLE` | 宿主没有协商到 `app-execution/1`,`callFunction` / `capabilities.invoke` 无法执行 | ❌ |
|
|
127
|
-
| `UNSUPPORTED_OPERATION` | 平台未实现或未协商的操作 | ❌ | 改实现,见 [未实现的 SDK 功能](limits.md#未实现的-sdk-功能)
|
|
115
|
+
| 错误码 | 含义 | 可重试 | 处理 |
|
|
116
|
+
| ----------------------------------- | --------------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
117
|
+
| `COMMIT_UNKNOWN` | **写操作结果未知**(写请求 30 秒未返回等) | ✅ | **用原 `operationId` 查回执**,确认前不要换编号重新写 |
|
|
118
|
+
| `CALL_TIMEOUT` | 读请求 30 秒未返回 / 握手 15 秒未完成 / 作业等待超时 | ✅ | 可重试;带 `jobId` 时用 `jobs.wait` 继续等 |
|
|
119
|
+
| `RUNTIME_UNAVAILABLE` | 通道已关闭或服务暂不可用 | ✅ | 稍后重试;页面卸载后通道不可再用 |
|
|
120
|
+
| `APP_RATE_LIMITED` | 本应用此刻并发请求过多(单应用并发槽被占满) | ❌\* | 稍后重试;不要立刻循环重试 |
|
|
121
|
+
| `RESOURCE_EXHAUSTED` | 超出限制(并发 >8、分页/排序/大小上限、配额) | — | 对照 [限制](limits.md) 调整;配额类需清理数据 |
|
|
122
|
+
| `REQUEST_TOO_LARGE` | 请求体超过协商上限(默认 256 KiB) | ❌ | 拆分请求 |
|
|
123
|
+
| `IDEMPOTENCY_CONFLICT` | 同一请求编号被重复使用,或同一操作编号用于不同内容 | ❌ | 新请求用新编号;重试同一写入时内容必须完全相同 |
|
|
124
|
+
| `OPERATION_EXPIRED` | 操作编号超出首次使用窗口(300 秒)或回执已过期 | ❌ | 重新读取最新状态后,用新编号发起 |
|
|
125
|
+
| `PROTOCOL_MISMATCH` | SDK 与宿主协议不一致,或响应结构异常 | ❌ | 使用与当前 OS 匹配的 SDK 版本 |
|
|
126
|
+
| `BACKGROUND_CAPABILITY_UNAVAILABLE` | 宿主没有协商到 `app-execution/1`,`callFunction` / `capabilities.invoke` 无法执行 | ❌ | 先让使用者在应用窗口「权限」里勾选后台能力并保存;确认安装已绑定就绪发布、部署开放后台执行。旧 SDK 报的是 `UNSUPPORTED_OPERATION`,升级 SDK |
|
|
127
|
+
| `UNSUPPORTED_OPERATION` | 平台未实现或未协商的操作 | ❌ | 改实现,见 [未实现的 SDK 功能](limits.md#未实现的-sdk-功能) |
|
|
128
128
|
|
|
129
129
|
\* `retryable` 为 `false`,但稍等后重试通常能成功;持续出现说明有长任务占满了并发。
|
|
130
130
|
|
|
131
131
|
### 初始化与授权
|
|
132
132
|
|
|
133
|
-
| 错误码 | 含义
|
|
134
|
-
| ---------------------- |
|
|
135
|
-
| `INIT_REQUIRED` | 调用 `ready()` 前没有 `zl.cloud.init()`
|
|
136
|
-
| `INIT_CONFLICT` | 同一页面用不同环境再次初始化
|
|
137
|
-
| `ENV_MISMATCH` | `env` 取值非法
|
|
138
|
-
| `AUTH_REQUIRED` | 登录态或运行会话失效
|
|
139
|
-
| `SCOPE_FORBIDDEN` | 权限范围不允许(含未授权数据访问、生产文件存储未开放)
|
|
140
|
-
| `ENV_FORBIDDEN` | 应用要用的环境不存在或已停用
|
|
141
|
-
| `PUBLISHER_REQUIRED` |
|
|
142
|
-
| `STALE_GENERATION` | 授权或数据绑定已换代(如重新授权、恢复备份)
|
|
143
|
-
| `RULE_DENIED` | 集合记录规则拒绝了本次读/写
|
|
144
|
-
| `QUERY_NOT_AUTHORIZED` | 查询不在授权范围内(宿主白名单中的码,服务端来源**未验证**)
|
|
133
|
+
| 错误码 | 含义 | 处理 |
|
|
134
|
+
| ---------------------- | ------------------------------------------------------------ | ---------------------------------------------------------------------- |
|
|
135
|
+
| `INIT_REQUIRED` | 调用 `ready()` 前没有 `zl.cloud.init()` | 先初始化 |
|
|
136
|
+
| `INIT_CONFLICT` | 同一页面用不同环境再次初始化 | 一个页面只绑定一个环境 |
|
|
137
|
+
| `ENV_MISMATCH` | `env` 取值非法 | 只能是 `dev` / `prod`(或 `DYNAMIC_CURRENT_ENV`) |
|
|
138
|
+
| `AUTH_REQUIRED` | 登录态或运行会话失效 | 重新打开应用 |
|
|
139
|
+
| `SCOPE_FORBIDDEN` | 权限范围不允许(含未授权数据访问、生产文件存储未开放) | 见本页末尾「排查:`SCOPE_FORBIDDEN`」 |
|
|
140
|
+
| `ENV_FORBIDDEN` | 应用要用的环境不存在或已停用 | 见下方「打开应用时的错误」 |
|
|
141
|
+
| `PUBLISHER_REQUIRED` | 开发数据域只对应用成员开放 | 请管理员在控制台「成员」里把你加为开发者;给其他人用需要发布为线上版本 |
|
|
142
|
+
| `STALE_GENERATION` | 授权或数据绑定已换代(如重新授权、恢复备份) | 重新打开应用,建立新会话 |
|
|
143
|
+
| `RULE_DENIED` | 集合记录规则拒绝了本次读/写 | 检查 `data.policies` 的 `read`/`write` 表达式与文档内容 |
|
|
144
|
+
| `QUERY_NOT_AUTHORIZED` | 查询不在授权范围内(宿主白名单中的码,服务端来源**未验证**) | 检查查询条件与授权 |
|
|
145
145
|
|
|
146
146
|
### 数据
|
|
147
147
|
|
|
@@ -151,6 +151,7 @@
|
|
|
151
151
|
| `VERSION_CONFLICT` | 乐观锁冲突,或键已存在等 409 类错误 | 重新读取最新版本再改 |
|
|
152
152
|
| `DOCUMENT_NOT_FOUND` | 文档不存在(或 404 类错误) | 检查文档键;读取时可用 `throwOnNotFound: false` |
|
|
153
153
|
| `COLLECTION_NOT_FOUND` | 集合不存在 | 在 Manifest `data.collections` 声明;生产环境要单独开通集合 |
|
|
154
|
+
| `SCOPE_FORBIDDEN` | 读写了 manifest **没声明**的集合(或没授权) | 先在 `data.collections` 声明再部署;已声明还报这个,看「权限」里是否勾了数据读写 |
|
|
154
155
|
| `INDEX_REQUIRED` | 查询需要扫描的行数超过单次上限 | 给筛选字段建索引;已有索引仍超限时缩小筛选范围 |
|
|
155
156
|
| `RESOURCE_NOT_READY` | 云数据库正在开通,或数据服务还没加载本应用 | 通常一分钟内自动就绪,稍后刷新重试 |
|
|
156
157
|
|
|
@@ -164,17 +165,17 @@
|
|
|
164
165
|
|
|
165
166
|
### 发布与后台调用
|
|
166
167
|
|
|
167
|
-
| 错误码 | 含义 | 处理
|
|
168
|
-
| ----------------------------------- | -------------------------------------------------- |
|
|
169
|
-
| `FUNCTION_RELEASE_REQUIRED` | 当前安装还没有绑定就绪的签名发布 |
|
|
170
|
-
| `RELEASE_UNAVAILABLE` |
|
|
171
|
-
| `RELEASE_NOT_READY` | 发布候选尚未就绪 |
|
|
172
|
-
| `RELEASE_DISABLED` | 发布候选已撤回 |
|
|
173
|
-
| `RELEASE_ACTIVATION_UNAVAILABLE` | 目标环境不存在且无法自动创建 |
|
|
174
|
-
| `RELEASE_ACTIVATION_TARGET_MISSING` | 激活目标与校验后的 Manifest 不一致(少见) |
|
|
175
|
-
| `NODE_LOST` | 执行节点失联,**结果未确认**(作业状态 `unknown`) | 不要重复提交;用 `jobId` / `invocationId` 核对
|
|
176
|
-
| `NODE_LOST_EXPIRED` | 节点失联且超过对账期限 | 到控制台运行记录核对是否已产生写入,再决定是否重新提交
|
|
177
|
-
| `EXECUTION_FAILED` | `callFunction` 作业失败且没有更具体的错误码 | 到控制台运行记录或日志查看失败原因
|
|
168
|
+
| 错误码 | 含义 | 处理 |
|
|
169
|
+
| ----------------------------------- | -------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
170
|
+
| `FUNCTION_RELEASE_REQUIRED` | 当前安装还没有绑定就绪的签名发布 | 在应用窗口「权限」里允许后台运行(重新保存一次),或在控制台「版本管理」切换一次版本,平台自动补签并绑定;仍出现说明部署的发布签名不可用(联系平台管理员检查签名密钥 / 信任配置),或重新上传 |
|
|
171
|
+
| `RELEASE_UNAVAILABLE` | 发布代数已变化(安装绑定了新版本),旧会话作废 | 宿主会自动重开会话并重试一次;仍失败时重新打开应用 |
|
|
172
|
+
| `RELEASE_NOT_READY` | 发布候选尚未就绪 | 重新发布,平台会重新签发 |
|
|
173
|
+
| `RELEASE_DISABLED` | 发布候选已撤回 | 重新上传并发布 |
|
|
174
|
+
| `RELEASE_ACTIVATION_UNAVAILABLE` | 目标环境不存在且无法自动创建 | 通常是部署未开放对应环境;请联系平台管理员 |
|
|
175
|
+
| `RELEASE_ACTIVATION_TARGET_MISSING` | 激活目标与校验后的 Manifest 不一致(少见) | 重新上传并安装该版本 |
|
|
176
|
+
| `NODE_LOST` | 执行节点失联,**结果未确认**(作业状态 `unknown`) | 不要重复提交;用 `jobId` / `invocationId` 核对 |
|
|
177
|
+
| `NODE_LOST_EXPIRED` | 节点失联且超过对账期限 | 到控制台运行记录核对是否已产生写入,再决定是否重新提交 |
|
|
178
|
+
| `EXECUTION_FAILED` | `callFunction` 作业失败且没有更具体的错误码 | 到控制台运行记录或日志查看失败原因 |
|
|
178
179
|
|
|
179
180
|
`callFunction` 失败时,`errCode` 优先使用作业结果里的 `errorCode`;作业状态为 `unknown` 时抛 `COMMIT_UNKNOWN`,
|
|
180
181
|
仍在排队/执行时抛 `CALL_TIMEOUT`(都带 `jobId`,可用 `jobs.wait` 继续等)。`capabilities.invoke` 不抛错,
|
|
@@ -205,10 +206,10 @@
|
|
|
205
206
|
|
|
206
207
|
| 原因码 | message | next_action / 处理 |
|
|
207
208
|
| --------------------------------- | ---------------------------------------------------------- | -------------------------------------------------------------------------------- |
|
|
208
|
-
| `ENV_FORBIDDEN`(环境不存在) | 环境不可访问 |
|
|
209
|
+
| `ENV_FORBIDDEN`(环境不存在) | 环境不可访问 | 「该应用还没有开通生产环境:发布为线上版本时会自动准备生产环境,稍后重试」 |
|
|
209
210
|
| `ENV_FORBIDDEN`(环境已停用) | 环境不可访问 | 「该环境的记录已被停用,请回应用页重新加载,或在「数据权限」里重新保存一次授权」 |
|
|
210
211
|
| `ENV_FORBIDDEN`(部署未开放生产) | 生产 Cloud 运行能力尚未开放 / 本部署未开放生产环境 | 部署未开放生产时只能用开发环境 |
|
|
211
|
-
| `PUBLISHER_REQUIRED` | 环境不可访问 |
|
|
212
|
+
| `PUBLISHER_REQUIRED` | 环境不可访问 | 非应用成员打开只有开发环境的应用;发布为线上版本后才能给其他人用 |
|
|
212
213
|
| `CONSENT_REQUIRED` | 请先由宿主用户明确授权数据访问 | 在应用窗口「权限」里勾选后保存(应用里表现为 `SCOPE_FORBIDDEN`) |
|
|
213
214
|
| `STORAGE_PROD_UNAVAILABLE` | 生产文件存储尚未开放 | 部署未开放生产文件存储(应用里表现为 `SCOPE_FORBIDDEN`) |
|
|
214
215
|
| `RESOURCE_NOT_READY` | 基础服务未就绪 | 环境的云资源还没接上,稍后重新打开 |
|
|
@@ -289,39 +290,30 @@
|
|
|
289
290
|
|
|
290
291
|
上传同一路径的文件时,没有 `overwrite` + `expectedETag` 就会得到 `VERSION_CONFLICT`。
|
|
291
292
|
|
|
292
|
-
##
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
|
298
|
-
|
|
|
299
|
-
| `
|
|
300
|
-
| `
|
|
301
|
-
| `
|
|
302
|
-
| `
|
|
303
|
-
| `
|
|
304
|
-
| `
|
|
305
|
-
| `
|
|
306
|
-
| `ACTIVATION_EPOCH_REQUIRED` | 该安装已绑定过发布版本:带上当前授权代数再激活(刷新页面会自动带上) |
|
|
307
|
-
| `ACTIVATION_REQUEST_REQUIRED` | 缺少 request_id:重新点一次激活会生成新的 request_id |
|
|
308
|
-
| `RELEASE_STATE_CHANGED` | 发布状态在激活过程中变了:刷新页面后重试 |
|
|
309
|
-
| `ROLLBACK_TARGET_UNAVAILABLE` | 当前并没有绑定到要回滚的版本:刷新页面后重试 |
|
|
310
|
-
| `IDEMPOTENCY_CONFLICT` | 这个 request_id 已经用于另一次请求:重试会生成新的 request_id |
|
|
311
|
-
| `RELEASE_ACTIVATION_UNAVAILABLE` | 该应用还没有这个环境:先在「数据权限」里选择这个环境再激活 |
|
|
312
|
-
| `RELEASE_ACTIVATION_TARGET_MISSING` | (见下方说明) |
|
|
313
|
-
| `RELEASE_DISABLED`、`RELEASE_ACTIVATION_SCOPE_REQUIRED`、`RELEASE_ARTIFACT_MISMATCH`、`FUNCTION_RUNTIME_SNAPSHOT_REQUIRED` | 无(按原因码处理) |
|
|
293
|
+
## 发布与生产门禁
|
|
294
|
+
|
|
295
|
+
第一次发布带云资源的版本时,平台自动完成**应用级**生产准备:生产环境 → 签发生产发布(归属上传者)→ 生产门禁 → 生产库与生产集合,
|
|
296
|
+
不依赖任何人的安装。生产门禁不通过时统一返回 40900,`data` 里同时带 `reason` 和 `next_action`:
|
|
297
|
+
|
|
298
|
+
| 原因码 | next_action |
|
|
299
|
+
| ------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
|
|
300
|
+
| `RELEASE_NOT_READY` | 这个发布版本还没就绪:重新发布,平台会重新签发 |
|
|
301
|
+
| `RELEASE_PROOF_UNAVAILABLE` | 这个发布版本缺少可验证的签名证明:重新发布会重新签发 |
|
|
302
|
+
| `RELEASE_POLICY_STALE` | 发布版本记录的是旧策略:重新发布会按当前策略重新签发 |
|
|
303
|
+
| `RELEASE_TRUST_UNAVAILABLE` | 签名与当前信任策略对不上:重新发布,或让管理员检查发布信任配置 |
|
|
304
|
+
| `RELEASE_APPROVAL_EXPIRED_OR_MISSING` | 这个发布版本没有有效的生产审批:重新发布会重新签发 |
|
|
305
|
+
| `PRODUCTION_RELEASE_UNAVAILABLE` | 本部署没有可用的生产签发方:先配好生产签发密钥,或改用开发环境 |
|
|
306
|
+
| `RELEASE_DISABLED`、`RELEASE_ARTIFACT_MISMATCH`、`FUNCTION_RUNTIME_SNAPSHOT_REQUIRED` | 无(按原因码处理);重新上传或重新发布 |
|
|
314
307
|
|
|
315
308
|
需要知道的变化:
|
|
316
309
|
|
|
317
|
-
-
|
|
318
|
-
|
|
319
|
-
-
|
|
320
|
-
|
|
321
|
-
- 安装从未绑定过发布时,首次激活可以不带 `expected_activation_epoch`。
|
|
322
|
-
- 生产不可用有两种返回:激活接口的 40300(`message` 为 `PRODUCTION_RELEASE_UNAVAILABLE`,`reason` 为
|
|
310
|
+
- 生产门禁由平台自动检查(签名证明、审批窗口、策略版本、信任根、函数运行快照、生产签发方),
|
|
311
|
+
所有步骤自动完成;不通过时按上表给出原因,**重新发布会重新签发**。
|
|
312
|
+
- 已经发布过的版本再次发布(包括回退)直接复用当时的就绪发布,不会重新跑一遍生产准备。
|
|
313
|
+
- 生产不可用有两种返回:发布接口的 40300(`message` 为 `PRODUCTION_RELEASE_UNAVAILABLE`,`reason` 为
|
|
323
314
|
`DEPLOYMENT_NOT_PRODUCTION` / `PRODUCTION_RELEASE_UNAVAILABLE` / `RELEASE_TRUST_UNAVAILABLE`,不带 `next_action`),
|
|
324
315
|
以及生产门禁的 40900(带上表的 `next_action`)。前者是部署没开放生产,不是你写错了。
|
|
316
|
+
- 发布本身的其他失败(生产库未就绪、上传者账号已停用)见 [发布为线上版本](#发布为线上版本)。
|
|
325
317
|
|
|
326
318
|
## 后台调用与云函数
|
|
327
319
|
|
|
@@ -406,25 +398,23 @@
|
|
|
406
398
|
|
|
407
399
|
`zleap-app prepare` 的特殊结果:
|
|
408
400
|
|
|
409
|
-
-
|
|
401
|
+
- 通常不需要 `prepare`(上传时自动签名、安装 / 切换版本时自动绑定),只在 `zleap-app diagnose` 提示 `next_action: app_prepare` 时兜底使用。
|
|
410
402
|
它只准备开发环境:只声明数据的应用在开发权限阶段后结束,`status` 为 **`ready`**,响应里 `"environment": "dev"`;
|
|
411
|
-
Manifest 声明了 headless
|
|
412
|
-
- **旧 `app_key` 应用**没有声明云资源(无 `cloud.*` 权限、无后台能力、无集合)时直接返回 `status` 为 **`not_required`**,
|
|
413
|
-
`next` 提示「应用未声明云资源或后台执行,安装后即可运行」。
|
|
403
|
+
Manifest 声明了 headless 后台能力时,还会创建发布候选、签名并绑定到开发环境。
|
|
414
404
|
- 某个阶段失败时,`data` 里带 `stage`(失败的阶段)、`completed_stages`(已完成的阶段)、`cause.reason`(原因码)、
|
|
415
405
|
`next`(「用app_diagnose核对当前状态;不自动重试准备写操作」),内层错误有 `next_action` 时也一并带上。
|
|
416
406
|
用**同一个** `--request-id` 重试会从失败的阶段继续。
|
|
417
407
|
- 其他失败:42200「version_id和32位小写十六进制request_id必填」、40900「请先安装指定版本」、
|
|
418
|
-
40300
|
|
408
|
+
40300「只能准备本人上传的版本」(传了别人上传的 `version_id`)、
|
|
419
409
|
42200「应用执行或共享调度未启用,需要平台管理员完成部署」、40900「准备结果未确认,请先诊断」。不传 `--request-id` 时命令行会自动生成。
|
|
420
410
|
|
|
421
411
|
> **`prepare` 支持哪些版本**(说明)
|
|
422
412
|
>
|
|
423
413
|
>
|
|
424
|
-
>
|
|
425
|
-
>
|
|
426
|
-
>
|
|
427
|
-
>
|
|
414
|
+
> 只接受**本人上传**的版本(可见性 `members`),只准备开发环境
|
|
415
|
+
> (开发环境 → 数据库 → 开发数据域权限,声明了 headless 时再加签名并绑定到开发环境),不会碰生产;
|
|
416
|
+
> 生产由**首次发布为线上版本**自动准备。因为自动签名与绑定,通常不需要它,只在 `diagnose` 提示 `next_action: app_prepare` 时兜底使用。
|
|
417
|
+
>
|
|
428
418
|
|
|
429
419
|
`zleap-app publish` 等写操作网络结果不明时返回 `COMMIT_UNKNOWN`,**不会自动重传**:
|
|
430
420
|
用 `zleap-app operation --request-id <原操作号>` 或 `zleap-app status` 查询原结果。
|
|
@@ -433,28 +423,24 @@
|
|
|
433
423
|
|
|
434
424
|
上传、`zleap-app check` 或安装时,Manifest 相关失败通过 `detail.reason` 返回:
|
|
435
425
|
|
|
436
|
-
| 原因 | 含义
|
|
437
|
-
| ----------------------- |
|
|
438
|
-
| `MANIFEST_UNSUPPORTED` | `schema` 不是 `zleap.app/2
|
|
439
|
-
| `SCHEMA_INVALID` | 集合 Schema 不符合数据面契约(`detail.collection` 指出集合)
|
|
440
|
-
| `RULE_DENIED` | 集合记录规则表达式无效
|
|
441
|
-
| `RULE_FIELD_UNDECLARED` | 记录规则引用了 Schema 未声明的字段
|
|
442
|
-
| `RUNTIME_UNAVAILABLE` | 运行环境未开放(`builtin` UI、纯后台带函数等)
|
|
443
|
-
| `FEATURE_UNAVAILABLE` | 声明了未开放的能力或写法
|
|
426
|
+
| 原因 | 含义 | 处理 |
|
|
427
|
+
| ----------------------- | ------------------------------------------------------------ | -------------------------------------------------------------- |
|
|
428
|
+
| `MANIFEST_UNSUPPORTED` | `schema` 不是 `zleap.app/2`、结构/引用/执行形态无效 | 对照 [Manifest](manifest.md) 逐字段核对 |
|
|
429
|
+
| `SCHEMA_INVALID` | 集合 Schema 不符合数据面契约(`detail.collection` 指出集合) | 只用集合 Schema 子集 |
|
|
430
|
+
| `RULE_DENIED` | 集合记录规则表达式无效 | 修正表达式 |
|
|
431
|
+
| `RULE_FIELD_UNDECLARED` | 记录规则引用了 Schema 未声明的字段 | 在 Schema 顶层声明该字段 |
|
|
432
|
+
| `RUNTIME_UNAVAILABLE` | 运行环境未开放(`builtin` UI、纯后台带函数等) | 见 [不可安装的配置](limits.md#已知会导致「应用不可安装」的配置) |
|
|
433
|
+
| `FEATURE_UNAVAILABLE` | 声明了未开放的能力或写法 | 同上 |
|
|
444
434
|
|
|
445
435
|
常见的上传失败文案(没有原因码,直接看提示):
|
|
446
436
|
|
|
447
|
-
| 提示
|
|
448
|
-
|
|
|
449
|
-
| 应用包根目录必须包含非空 LICENSE 文件
|
|
450
|
-
| manifest entry 必须指向存在的包内 HTML 文件
|
|
451
|
-
|
|
|
452
|
-
|
|
|
453
|
-
|
|
|
454
|
-
| 不能覆盖其他发布者的应用标识 | 仅旧 `app_key` 应用:`app_key` 已被别人使用 |
|
|
455
|
-
| 该版本已经存在,请更换版本号 | 同版本号、内容不同 |
|
|
456
|
-
| 云函数制品入口缺失 | 函数 `entry` 在包里不存在 |
|
|
457
|
-
| 应用包不在开发会话授权范围 | 包里的 `appid` 与 `zleap-app auth login` 时不一致 |
|
|
437
|
+
| 提示 | 原因 |
|
|
438
|
+
| ------------------------------------------- | ------------------------------------------------- |
|
|
439
|
+
| 应用包根目录必须包含非空 LICENSE 文件 | 缺少 `LICENSE` 或内容为空 |
|
|
440
|
+
| manifest entry 必须指向存在的包内 HTML 文件 | `entry` 不是包内 `.html`/`.htm`,或文件不存在 |
|
|
441
|
+
| 该版本已经存在,请更换版本号 | 同版本号、内容不同 |
|
|
442
|
+
| 云函数制品入口缺失 | 函数 `entry` 在包里不存在 |
|
|
443
|
+
| 应用包不在开发会话授权范围 | 包里的 `appid` 与 `zleap-app auth login` 时不一致 |
|
|
458
444
|
|
|
459
445
|
### 应用与成员
|
|
460
446
|
|
|
@@ -469,26 +455,21 @@
|
|
|
469
455
|
|
|
470
456
|
成员管理见 [成员管理](console-members.md)。
|
|
471
457
|
|
|
472
|
-
###
|
|
458
|
+
### 发布为线上版本
|
|
473
459
|
|
|
474
|
-
控制台「版本管理」发布 / 回退(`POST /api/v1/app-cloud/apps/{app_id}/publish
|
|
460
|
+
控制台「版本管理」发布 / 回退(`POST /api/v1/app-cloud/apps/{app_id}/publish`):
|
|
475
461
|
|
|
476
|
-
| 业务码 | message
|
|
477
|
-
| ------ |
|
|
478
|
-
| 40900 | 生产数据库还没就绪,暂时不能发布
|
|
479
|
-
| 40900 | 这个版本的上传者账号已停用,无法发布
|
|
480
|
-
|
|
|
481
|
-
|
|
|
482
|
-
| 40400 |
|
|
483
|
-
| 42200 | 发布说明最多 500 字 | — | 缩短发布说明 |
|
|
484
|
-
| 40400 | 应用不存在,或你不是这个应用的成员 | — | 请联系应用管理员在云开发控制台「成员」里把你加为开发者 |
|
|
485
|
-
|
|
486
|
-
`USE_VERSION_MANAGEMENT` 来自应用中心的「发布到企业目录 / 撤回企业目录」接口,不是版本管理接口本身的错误;
|
|
487
|
-
它表示**这个应用不该在应用中心改线上状态**。平台 `appid` 应用请改用控制台「版本管理」。
|
|
462
|
+
| 业务码 | message | `detail.reason` | 处理(`next_action`) |
|
|
463
|
+
| ------ | --------------------------------------- | ------------------------- | --------------------------------------------------------------------------------- |
|
|
464
|
+
| 40900 | 生产数据库还没就绪,暂时不能发布 | `PROD_DATABASE_NOT_READY` | 通常 1 分钟内就绪,稍后在版本管理里重新发布;持续失败请在控制台「数据库」查看状态 |
|
|
465
|
+
| 40900 | 这个版本的上传者账号已停用,无法发布 | `UPLOADER_INACTIVE` | 请其他成员重新上传这个版本(npm run deploy)后再发布 |
|
|
466
|
+
| 40400 | 版本不存在或已删除 / 该版本没有可用制品 | — | 刷新版本列表后重试 |
|
|
467
|
+
| 42200 | 发布说明最多 500 字 | — | 缩短发布说明 |
|
|
468
|
+
| 40400 | 应用不存在,或你不是这个应用的成员 | — | 请联系应用管理员在云开发控制台「成员」里把你加为开发者 |
|
|
488
469
|
|
|
489
470
|
任一成员都可以发布任一版本,不要求上传者正在使用这个版本。带云资源(集合、`cloud.*` 能力、`runtime.backend` 或 headless 能力)的版本**第一次**发布时,
|
|
490
471
|
平台自动完成应用级生产准备(生产环境 → 签发生产发布 → 生产门禁 → 生产库与生产集合),`PROD_DATABASE_NOT_READY`、`UPLOADER_INACTIVE` 只在这一步出现;
|
|
491
|
-
|
|
472
|
+
生产门禁不通过时返回 [发布与生产门禁](#发布与生产门禁) 表中的原因码(如 `RELEASE_APPROVAL_EXPIRED_OR_MISSING`、`RELEASE_POLICY_STALE`、`PRODUCTION_RELEASE_UNAVAILABLE`),重新发布即会重新签发。
|
|
492
473
|
已经发布过的版本再次发布(包括回退)直接复用当时的就绪发布。见 版本管理 · 带云资源的版本(文档站 /console/release#带云资源的版本)。
|
|
493
474
|
|
|
494
475
|
## 版本更新与回滚
|
|
@@ -497,12 +478,12 @@
|
|
|
497
478
|
|
|
498
479
|
这些码来自安装版本切换接口(`appversion/read.go`、`official.go`、`apply.go`):
|
|
499
480
|
|
|
500
|
-
| 业务码 | message | `detail.reason` | 处理
|
|
501
|
-
| ------ | -------------------------------- | ------------------------------ |
|
|
502
|
-
| 42200 | 应用没有可切换的版本 | `VERSION_LIST_EMPTY` |
|
|
503
|
-
| 42200 | 官方版本切换必须指定当前安装版本 | `EXPECTED_VERSION_REQUIRED` | 请求里带上当前安装的版本 ID(CLI 用 `--expected-version-id`),不要省略
|
|
504
|
-
| 40900 | 安装版本已变化 | `INSTALLATION_VERSION_STALE` | 你带来的「当前版本」与安装记录不一致;重新读取安装状态后,用最新的版本 ID 再操作
|
|
505
|
-
| 40900 | 安装版本已变化 | `INSTALLATION_VERSION_CHANGED` | 提交期间安装被其他操作改掉了;刷新后重新读取,再决定是否重试
|
|
481
|
+
| 业务码 | message | `detail.reason` | 处理 |
|
|
482
|
+
| ------ | -------------------------------- | ------------------------------ | ---------------------------------------------------------------------------------------------- |
|
|
483
|
+
| 42200 | 应用没有可切换的版本 | `VERSION_LIST_EMPTY` | 该应用还没有任何有效版本,或你的账号看不到任何版本;先在控制台「版本管理」确认已有上传,再刷新 |
|
|
484
|
+
| 42200 | 官方版本切换必须指定当前安装版本 | `EXPECTED_VERSION_REQUIRED` | 请求里带上当前安装的版本 ID(CLI 用 `--expected-version-id`),不要省略 |
|
|
485
|
+
| 40900 | 安装版本已变化 | `INSTALLATION_VERSION_STALE` | 你带来的「当前版本」与安装记录不一致;重新读取安装状态后,用最新的版本 ID 再操作 |
|
|
486
|
+
| 40900 | 安装版本已变化 | `INSTALLATION_VERSION_CHANGED` | 提交期间安装被其他操作改掉了;刷新后重新读取,再决定是否重试 |
|
|
506
487
|
|
|
507
488
|
`INSTALLATION_VERSION_STALE` 在写入前检查就失败;`INSTALLATION_VERSION_CHANGED` 是写入时的并发校验失败(CAS 没命中)。
|
|
508
489
|
两者都**不要用旧的版本 ID 盲目重试**,先 `zleap-app diagnose` 或在控制台刷新安装状态。
|
|
@@ -538,26 +519,26 @@
|
|
|
538
519
|
>
|
|
539
520
|
> 这个码由 CLI/MCP 的版本切换接口返回。应用中心的「更新」走上面的预检流程,Schema 变化只是提醒,分区变化才阻断。
|
|
540
521
|
|
|
541
|
-
##
|
|
522
|
+
## 发布签名
|
|
542
523
|
|
|
543
|
-
|
|
524
|
+
平台在上传带后台能力的版本时自动签发开发发布,首次发布为线上版本时自动签发生产发布。
|
|
525
|
+
签发或验签失败时按原因码归类返回:
|
|
544
526
|
|
|
545
|
-
| 服务端原因码 |
|
|
546
|
-
| --------------------------------------------------------------------------------- |
|
|
547
|
-
| `RELEASE_PROOF_TOO_LARGE
|
|
548
|
-
| `RELEASE_PROOF_INVALID` | 证明 JSON
|
|
549
|
-
| `RELEASE_IDENTITY_MISMATCH`、`RELEASE_DIGEST_MISMATCH`、`RELEASE_SOURCE_MISMATCH` |
|
|
550
|
-
| `RELEASE_SIGNATURE_INVALID` |
|
|
551
|
-
| `RELEASE_ARTIFACT_MISMATCH`、`RELEASE_MANIFEST_MISMATCH` | 签名 Manifest
|
|
552
|
-
| `RELEASE_POLICY_STALE` |
|
|
553
|
-
| `RELEASE_POLICY_UNAVAILABLE` |
|
|
554
|
-
| `RELEASE_TRUST_UNAVAILABLE` |
|
|
555
|
-
| `RELEASE_DISABLED` |
|
|
556
|
-
| 其他 |
|
|
557
|
-
| 网络结果不明 | 结果未确认,已保留原发布与签名证明。请查询原结果,确认前不会重复提交。 |
|
|
527
|
+
| 服务端原因码 | 含义 |
|
|
528
|
+
| --------------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
|
|
529
|
+
| `RELEASE_PROOF_TOO_LARGE` | 证明文件超过 2 MiB 限制 |
|
|
530
|
+
| `RELEASE_PROOF_INVALID` | 证明 JSON 或签名信封无效 |
|
|
531
|
+
| `RELEASE_IDENTITY_MISMATCH`、`RELEASE_DIGEST_MISMATCH`、`RELEASE_SOURCE_MISMATCH` | 证明与当前应用、发布、包、来源、摘要或策略不匹配 |
|
|
532
|
+
| `RELEASE_SIGNATURE_INVALID` | 无法验证发布签名 |
|
|
533
|
+
| `RELEASE_ARTIFACT_MISMATCH`、`RELEASE_MANIFEST_MISMATCH` | 签名 Manifest 或包制品清单不匹配 |
|
|
534
|
+
| `RELEASE_POLICY_STALE` | 策略审核已过期或不是当前策略 |
|
|
535
|
+
| `RELEASE_POLICY_UNAVAILABLE` | 尚未配置发布策略,无法验证 |
|
|
536
|
+
| `RELEASE_TRUST_UNAVAILABLE` | 发布信任策略尚未配置,或发布者密钥不可用、已撤销或已过期;由管理员检查 |
|
|
537
|
+
| `RELEASE_DISABLED` | 发布候选已撤回 |
|
|
538
|
+
| 其他 | 签名验证请求被拒绝 |
|
|
558
539
|
|
|
559
|
-
|
|
560
|
-
|
|
540
|
+
签发时的 `RELEASE_POLICY_UNAVAILABLE`、`RELEASE_TRUST_UNAVAILABLE` 属于**部署未配置**;
|
|
541
|
+
发布生产版本时的 `RELEASE_TRUST_UNAVAILABLE` 则表示这个发布的签名与当前信任策略对不上,重新发布即可(见 [发布与生产门禁](#发布与生产门禁))。
|
|
561
542
|
|
|
562
543
|
## 触发器与事件
|
|
563
544
|
|
|
@@ -603,8 +584,6 @@
|
|
|
603
584
|
| 日志库未开通导致云函数执行失败(`LOG_UNAVAILABLE` / `TELEMETRY_ALLOCATION_UNAVAILABLE`) | 云函数照常执行,只是暂时查不到日志 |
|
|
604
585
|
| 写入时偶发 `DATA_SERVICE_UNAVAILABLE`(数据绑定缺少身份记录) | 平台自动补建,不再报错 |
|
|
605
586
|
| 数据库已存在但数据服务尚未加载时 `RESOURCE_NOT_READY` | 按专属库是否存在判定,已开通的库直接可用 |
|
|
606
|
-
| 激活要求「至少允许一项后台能力」(`RELEASE_ACTIVATION_TARGET_MISSING`) | 激活不再要求后台能力 |
|
|
607
|
-
| 激活到不存在的环境(`RELEASE_ACTIVATION_UNAVAILABLE`) | 激活时自动创建环境 |
|
|
608
587
|
|
|
609
588
|
## 状态值
|
|
610
589
|
|
|
@@ -623,6 +602,8 @@
|
|
|
623
602
|
|
|
624
603
|
### 发布候选
|
|
625
604
|
|
|
605
|
+
发布候选由平台自动创建和签名,不需要手动操作。
|
|
606
|
+
|
|
626
607
|
| 状态 | 控制台文案 |
|
|
627
608
|
| ------------ | ---------- |
|
|
628
609
|
| `draft` | 草稿 |
|
|
@@ -630,7 +611,7 @@
|
|
|
630
611
|
| `ready` | 已就绪 |
|
|
631
612
|
| `disabled` | 已撤回 |
|
|
632
613
|
|
|
633
|
-
|
|
614
|
+
只有「已就绪」的候选可以用于发布。生产门禁评估结论:`eligible`「等待 Provider 复核」、
|
|
634
615
|
`blocked`「已阻断」、`invalid`「不可用」。
|
|
635
616
|
|
|
636
617
|
### 后台作业
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
1. 触发器指向的**后台能力已启用**:在应用窗口「权限」的「后台能力(定时任务 / 云函数)」里勾选,
|
|
117
117
|
或在 后台能力面板(文档站 /console/functions#后台能力) 点「允许后台运行」(安装时后台能力一律是停用);
|
|
118
118
|
2. 如果该能力的 provider 是云函数(`managed_function`),当前安装还要绑定**就绪**的签名发布,否则执行时报 `FUNCTION_RELEASE_REQUIRED`。
|
|
119
|
-
|
|
119
|
+
平台在上传时自动签名、安装 / 切换版本 / 授权时自动绑定,不需要手动操作;
|
|
120
120
|
3. Manifest 里**确实声明了**这个触发器;
|
|
121
121
|
4. `background.modes` 包含对应模式。
|
|
122
122
|
|
|
@@ -378,7 +378,7 @@
|
|
|
378
378
|
|
|
379
379
|
### 报 `TRIGGER_MODE_NOT_DECLARED`
|
|
380
380
|
|
|
381
|
-
`background.modes` 里没有 `"scheduled"`(或 `"events"
|
|
381
|
+
`background.modes` 里没有 `"scheduled"`(或 `"events"`)。补上后上传新版本、把安装更新到该版本(切换时平台自动绑定新版本的就绪发布)。
|
|
382
382
|
|
|
383
383
|
### 报 `TRIGGER_NOT_DECLARED`
|
|
384
384
|
|
|
@@ -387,7 +387,7 @@ Manifest 里找不到这个触发器 ID、ID 重复,或它的 `capability` 指
|
|
|
387
387
|
### 报 `TRIGGER_SCHEDULE_MISMATCH`
|
|
388
388
|
|
|
389
389
|
提交的 cron 和 Manifest 里写的**不完全一致**。控制台的 cron 直接取自声明,正常情况下不会出现;
|
|
390
|
-
|
|
390
|
+
如果出现,确认当前安装的就是你修改后上传的那个版本。
|
|
391
391
|
|
|
392
392
|
### 报 `TRIGGER_TIMEZONE_MISMATCH`
|
|
393
393
|
|
|
@@ -400,7 +400,7 @@ Manifest 里找不到这个触发器 ID、ID 重复,或它的 `capability` 指
|
|
|
400
400
|
|
|
401
401
|
1. 后台能力是「已允许后台运行」吗?显示「授权给的是之前安装的版本」时触发器会暂停,需要重新授权。
|
|
402
402
|
切换版本后:应用中心「更新」只会让**权限变宽**的能力需要重新确认;CLI `zleap-app update` / `rollback` 会**停用全部**后台能力;
|
|
403
|
-
2. 云函数类能力:当前安装绑定了就绪发布吗?运行记录里出现 `FUNCTION_RELEASE_REQUIRED`
|
|
403
|
+
2. 云函数类能力:当前安装绑定了就绪发布吗?运行记录里出现 `FUNCTION_RELEASE_REQUIRED` 时,在应用窗口「权限」里允许后台运行(重新保存一次),或在「版本管理」切换一次版本,平台自动补签并绑定;
|
|
404
404
|
3. 「接下来」的时间是不是还没到?
|
|
405
405
|
4. 数据库是否正在冻结(备份/恢复中)?
|
|
406
406
|
5. 看卡片的「最近投递」,再到 日志(文档站 /console/logs) 按调用编号查有没有执行记录。
|