回滚指南

如何将 Activepieces 回滚到上一个版本

概述

Activepieces 提供了一个回滚命令,可以在你需要降级到以前的版本时逆转数据库迁移。大多数版本都是完全可回滚的——如果某版本不可回滚,发布说明会告知你。

备份

对于大多数升级,你不需要备份,但如果你想要额外保险:

PostgreSQL

pg_dump -Fc $DATABASE_URL > backup-pre-upgrade.dump

PGLite

复制配置的 AP_CONFIG_PATH 下的 pglite 文件夹:

cp -r /path/to/config/pglite /path/to/config/pglite-backup

发布说明

包含不可逆数据库更改的版本会在发布说明底部添加备注,说明哪些迁移受到影响。如果你没有看到备注,则该版本是可回滚的。

执行回滚

回滚命令针对当前(更新)镜像运行,因为它包含迁移逆转逻辑。回滚数据库后,你切换到旧镜像。

步骤 1:停止 Activepieces

docker compose down

步骤 2:运行回滚命令

0.78.0 替换为你的当前版本,0.77.0 替换为你想要回退到的版本:

docker run --rm --env-file .env --entrypoint npm \
  activepieces/activepieces:0.78.0 \
  run rollback -- --to 0.77.0

如果该版本包含破坏性迁移,命令会要求你使用 --force 确认:

docker run --rm --env-file .env --entrypoint npm \
  activepieces/activepieces:0.78.0 \
  run rollback -- --to 0.77.0 --force

步骤 3:切换到旧镜像

更新你的 docker-compose.yml

services:
  activepieces:
    image: activepieces/activepieces:0.77.0

步骤 4:启动 Activepieces

docker compose up -d

从备份恢复

如果你已备份且希望从备份恢复:

dropdb activepieces
createdb activepieces
pg_restore -d activepieces backup-pre-upgrade.dump

然后将 docker-compose.yml 切换到之前的镜像版本并启动 Activepieces。

给贡献者的说明

每个新的数据库迁移必须:

  1. 实现 Migration 而非 MigrationInterface
  2. breaking 设置为 true(破坏性更改)或 false(仅新增)
  3. release 设置为目标发布版本(例如 '0.78.0'
  4. 使用有效的回滚查询实现 down() 方法

示例:

import { Migration } from '../../migration'
import { QueryRunner } from 'typeorm'

export class AddNewColumn1710000000000 implements Migration {
    name = 'AddNewColumn1710000000000'
    breaking = false
    release = '0.78.0'

    public async up(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.query(`ALTER TABLE "project" ADD COLUMN "description" text`)
    }

    public async down(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.query(`ALTER TABLE "project" DROP COLUMN "description"`)
    }
}

这些要求由 CI 强制执行——不满足这些要求的迁移的 PR 将无法通过检查。