每次在 migrate 的时候很容易遇到 table already exist 知道删除该张 table 就可以解决 有没有办法判断所有的栏位是否相同,若相同则不更新,不同则更新? 或是大家都怎么处理? 要用人工判断挺麻烦的!
Rails Migration 没有理解到,自己再研究一下文档:
你说的情况可能只适用于本地 dev 环境或者 prod 环境的测试,因为有对应的数据库产生来临时的 schema 文件,从而生成 in-memory DB。但是如果使用 remote build 系统,那么远程的 host 是不会有数据库连接的,那么在 build 的时候就找不到 schema 文件,无法进行测试。
其次,测试用的 SqlLite 的数据库有一些自己特别的限制,比如 index name 必须 unique。如果由本地数据库(如 MySql)产生的 schema 存在重复的 index name,那么 SqlLite 无法直接读入 schema 进行测试,每个 developer 都需要手动来改动 schema 文件,很浪费时间(发生在身边很多次)。
再着就是会发生楼主所说的情况,可能 migration 相互有冲突,无法依次执行 migration 来建立 DB,这时候一个比较简单的办法就是利用 schema 直接产生没有 data 的本地数据库。所以,schema 文件一般是要 check in 的。
@jossjoss54 你是在运行 migrate 时总遇到 table already exist 么?要么你们的 migration 文件不 consistent,要么你的本地数据库和远程数据库曾经进行过 sync 一部分 table,但是对应的 schema_migrations 表没有 sync。 有没有办法判断所有的栏位是否相同,若相同则不更新,不同则更新?是什么意思?你想要机器自动判断 table 是否一致自动运行 migration 么?