SuperAPI AI 工具集

migrations

通用与其它

查看项目

更新于 10-15 23:57

技能介绍

用途:为 Rails 8.1 应用编写安全、可回滚、只向前推进的数据库迁移,避免生产环境事故。

主要能力与规则:迁移一旦提交(尤其已在生产运行)即冻结,禁止编辑旧迁移,只能新建迁移;所有 schema 变更必须通过迁移,禁止直接改数据库;迁移只追加,修正错误需写新迁移。

使用方式:先用 cat db/schema.rb、bin/rails db:migrate:status、ls db/migrate/ 了解现状;用 bin/rails generate migration 生成迁移,命名遵循 CreateXxx、AddXxxToYyy、RemoveXxxFromYyy 等约定;可逆操作写在 change 中,不可逆操作使用 up/down 或 reversible;运行 bin/rails db:migrate 并用 db:migrate:status 验证,出错可在提交前用 bin/rails db:rollback 回滚修正;始终提交 db/schema.rb 或 db/structure.sql。

关键限制:外键列必须建索引;给已有数据的表加 NOT NULL 列必须提供默认值;迁移中不要引用应用模型,改用原始 SQL 或内联类;不要用动态 Ruby 值作默认值,改用 SQL 函数;remove_column 必须带类型;change_column 不可逆,需用 up/down。大型数据迁移应放到 rake 任务或 maintenance_tasks,而非 schema 迁移。多数据库场景使用 --database 参数与独立迁移目录。

适用场景:建表改表、增删改列、加索引与外键、改类型与约束、数据回填、排查迁移与回滚问题、多数据库迁移、理解 schema.rb 与 structure.sql。更详细的列类型、索引模式、UUID、检查约束等见该技能目录下的 reference.md。