在 Fabric 应用中应用并验证模式变更

通过使用 rayfin up 或 rayfin up db apply对数据库应用 Rayfin 实体的更改,并验证模式是否到达了服务器。

编辑一个 rayfin/data/ 类本身不会改变部署的数据库。 Rayfin 仅当你明确应用这些更改时,才会读取你的实体并生成 Data API Builder (DAB) 配置。

使用rayfin up进行应用更新

每当你想将最新的实体变更部署到 Fabric 应用时,都可以执行npx rayfin up:

npx rayfin up

此命令:

  • 同步运行时设置。
  • 应用根据 rayfin/data/ 中的装饰器生成的数据库架构。
  • 启用 staticHosting 时,构建并部署静态内容。

每次更改 rayfin/data/ 中的文件后,都运行该命令。 第一次部署后,后续运行会更新同一部署,而不是创建新的部署。

仅应用数据库架构变更

当你想应用数据库模式而不同步运行时设置或部署静态内容时,可以使用 npx rayfin up db apply :

npx rayfin up db apply

当你使用 npm run dev 运行前端、后端已部署完成,并且希望独立迭代 schema 时,这个高级子命令就非常有用。

如果更改可能导致数据丢失,比如丢弃列或重命名表,CLI会阻止该操作并描述潜在影响。 在您审查操作并接受数据丢失后,应用以下变更:--force

npx rayfin up db apply --force

Caution

该 --force 选项可能导致永久性数据丢失。 只有在你审查 CLI 报告的每一项操作后才使用。

验证已部署的模式

Warning

成功 rayfin up 或 rayfin up db apply 命令并不能保证你的前端能立即查询新的或更改的实体。 在测试实体之前,先确认部署是否正常。

在对 rayfin/data/ 进行任何更改后,检查部署情况:

npx rayfin up status

如果部署恢复正常后,新的或更改的实体仍然返回 GraphQL 错误,显式应用该模式,然后再次测试该实体:

npx rayfin up db apply

只有当 CLI 报告存在可能具有破坏性的更改,且您接受数据丢失时,才添加 --force。

对于机器可读部署状态,请使用 JSON 输出:

npx rayfin up status --json

你可以在脚本中使用该 JSON 响应,在运行进一步检查之前等待部署达到健康状态。

遵循典型的模式工作流程

# 1. Edit an entity, such as rayfin/data/Todo.ts.
# 2. Apply the application changes.
npx rayfin up

# 3. Verify that the deployment is healthy.
npx rayfin up status

# 4. If the changed entity still fails, apply the schema explicitly.
npx rayfin up db apply

如果第4步报告某项操作可能具有破坏性,请先检查该操作,然后再使用 --force 重新运行该命令。

排查架构变更问题

GraphQL 返回内部服务器错误

检查受影响实体上的每个 @text() 字段是否有缺失 max 值。 在 Microsoft SQL Server 中,不带有 max 的 @text() 会生成一个 NVARCHAR(MAX) 列,这可能会阻碍 GraphQL 架构的生成。

显式指定最大长度,然后应用该架构:

@text({ max: 200 })
title!: string;
npx rayfin up db apply --force

使用 --force 前,请查看已报告的操作。

CLI报告了一个潜在的破坏性变化

检查列出的操作,包括已删除的列、缩窄的类型和重命名的表。 确认数据丢失可接受后,再用 重新 --force 执行命令。

架构应用失败

运行 npx rayfin up status,并等待服务状态恢复正常后,再次尝试执行 schema apply。

该数据服务没有方言

当 services.data.enabled 为 true 时,在 rayfin/rayfin.yml 中配置 dialect: mssql。

services:
  data:
    enabled: true
    dialect: mssql

使用AI提示

将以下提示复制到 GitHub Copilot 或其他有权限访问你项目和终端的编码代理中:

I just added a new field to an entity in my Rayfin project's rayfin/data/ folder. Run
`npx rayfin up` to apply the change, then run `npx rayfin up status` to confirm the
deployment is healthy. If querying the changed entity still fails after that, run
`npx rayfin up db apply` and check again. Review any potentially destructive operations with me before using `--force`.