SuperAPI AI 工具集

ecto-release-migrations

部署与运维

查看项目

更新于 10-15 21:55

技能介绍

用途:在 Elixir release 环境中配置 Ecto 数据库迁移。release 中无法使用 Mix,因此该技能创建一个 Release 模块,通过 bin/app_name eval 命令完成数据库创建、迁移、回滚与种子数据加载。

主要能力:

  • 检测应用名与 Ecto repos(查看 mix.exs 的应用名,以及 config/config.exs 或 config/runtime.exs 中的 repos 配置)。
  • 在 lib/<app_name>/release.ex 生成 Release 模块,支持多 repo。
  • 提供 migrate、rollback(repo, version)、create、seed 等函数。
  • 校验配置:确保 config/runtime.exs 存在生产数据库配置,支持 DATABASE_URL 或显式配置。

必要用法: 创建模块后依次执行:

  • 编译:mix compile
  • 本地测试:mix run -e "<AppName>.Release.migrate()"
  • 构建 release:MIX_ENV=prod mix release
  • 测试 release:_build/prod/rel/<app_name>/bin/<app_name> eval "<AppName>.Release.migrate()"

生产命令:

  • 建库(仅首次部署):bin/<app_name> eval "<AppName>.Release.migrate()"
  • 运行迁移:bin/<app_name> eval "<AppName>.Release.migrate()"
  • 回滚到指定版本:bin/<app_name> eval "<AppName>.Release.rollback(<AppName>.Repo, 20240101000000)"
  • 种子数据:bin/<app_name> eval "<AppName>.Release.seed()"

Phoenix 多 repo 需在 config.exs 中配置:config :<app_name>, ecto_repos: [<AppName>.Repo, <AppName>.ReadRepo]。

限制与常见问题:需先调用 Application.ensure_all_started(:ssl) 与 Application.load(@app) 再操作 repo;缺少 ecto_repos 配置会导致失败。该技能面向 release 环境,普通 Mix 环境可直接使用 Mix 任务。