数据库、Cron 与 Timelines
理解新 Deno Deploy 的 PostgreSQL、Deno KV、Cron、环境上下文与 Timeline 隔离
新 Deno Deploy 的核心抽象是 app、revision、timeline 与 context。生产、Git 分支和 preview 可以运行不同 revision,并取得不同环境变量和逻辑数据库。
数据库
平台当前支持关联 PostgreSQL 或 Deno KV。每个 app 的生产、分支和 preview timeline 默认获得隔离的逻辑数据库。
const kv = await Deno.openKv();
Deno.serve(async () => {
await kv.set(["health", "lastSeen"], new Date().toISOString());
return Response.json({ ok: true });
});
PostgreSQL 连接会注入标准 DATABASE_URL、PGHOST、PGPORT、PGDATABASE、PGUSER、PGPASSWORD。迁移命令可以配置为 pre-deploy command,在 revision 接流量前运行。
Cron
Deno.cron("daily cleanup", "0 3 * * *", async () => {
await runCleanup();
});
Cron 使用 UTC。Deploy 在发布时发现任务并处理调度,执行显示在 dashboard/logs/traces。失败默认不重试;需要重试时在任务上显式配置 backoffSchedule(最多 5 次,单次延迟上限 1 小时)。任务必须幂等;重试与下一次计划重叠时可能跳过后一个执行。
Context 与环境变量
- Production:生产 timeline。
- Development:分支与 preview timeline。
- Build:只在构建阶段可见,不自动进入运行时。
- Secret 创建后不再在 UI 显示;不要通过日志回显。
使用 DENO_TIMELINE、DENO_DEPLOY_APP_ID 和 deployment 标识做日志维度,而不是把它们当访问控制。