新手问题 Rails 的 migration 更改

night_7th · 2014年11月19日 · 最后由 night_7th 回复于 2014年11月21日 · 5360 次阅读

Hi All. 我的项目现在还处在开发阶段. 之前已经通过 migration 创建了我的数据库. 现在想修改一下我的数据库表结构. 具体只想修改一个字段 把t.datetime :start_at 变成 t.date :start_at 我可不可以直接修改已有的 migration 文件呢? 难道一定要新增一个 migration 文件么?

我现在把已有的 migration 文件改了,然后在数据库里把原表删除,再执行rake db:migrate 或者rake db:migrate VERSION=序列号,发现数据库还是没有创建出那个表.

新增一个 migration 文件又不会肚子疼,怕啥么?

在数据库里面有个 migration 的 schema_migrations 表 去表里面删除对应的 version 值的记录

可以的,但推荐新建 migration 第二个问题: 先rake db:drop

@huobazi 我觉得这有点像打补丁,不美观,因为还处在开发阶段呀... @Shadow 这样可以! thx

@flowerwrong 嗯, 我准备上线之后再出现类似情况就新写一个 migration

rake db:migrate:reset

1、直接进数据库,用 SQL 代码改那个字段的类型; 2、直接改那个 migration 文件,然后跑一下 rake db:migrate

这样,你已有的数据库测试的记录还不会丢

这个没什么的,还是新增一个 Migration 比较好,不然你到后期数据都有东西了,你去 drop database?要习惯

如果是处于某个功能设计阶段(比如 git 开个分支自己干),或者还没部署到服务器上,又不担心清空数据,你可以修改已有的 migration,这样是为了避免设计更改导致无端增加数个 migration 文件。可以用以下命令去回滚然后重建

rake db:rollback   # 回滚,修改表
rake db:migrate   # 重建

或者这样:

rake db:migrate:redo

还可以加 STEP 指定 redo 几个 migration。

其他任何情况下,都建议加 migration。不管以后你部署服务器,或者你的小伙伴更新数据库,都只需要记住 rake db:migrate 就行。你也不希望很麻烦地去手动执行一些 SQL 去更改数据库吧(比如改 version)。能够解决数据结构同步问题,代价只是多一个文件,你觉得呢?

@darkbaby123 嗯,目前我就在自己分支上开发代码,所以就采取直接修改 migration 文件了,发现也蛮方便的,因为我就几条测试数据,所以删除了也不心疼。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号