Rails如何跟踪数据库运行了哪些迁移



根据Rails文档:http://guides.rubyonrails.org/migrations.html

"Active Record跟踪哪些迁移已经运行,所以你所要做的就是更新源代码并运行rake db:migrate。"

ActiveRecord实际上是如何做到这一点的?活动记录将数据存储在哪里?

我怀疑这可能存储在数据库中?在某个地方的桌子上。

在我的开发机器上,我运行了所有的迁移。然后,我使用mysqldump复制了生产数据库。然后我运行了"rakedb:migrate:status",它正确地显示了需要在生产数据库上运行的迁移。

我曾经认为ActiveRecord使用时间戳来跟踪上次迁移运行。但我认为这不是真的,因为ActiveRecord正确地运行了从另一个代码分支合并进来的"旧"迁移。

知情人士能详细说明吗?感谢

Rails在数据库中创建一个名为schema_migrations的表,以跟踪哪些迁移已经运行。

该表包含一列version。当Rails运行迁移时,它使用迁移文件名中的前导数字,并为该"版本"插入一行,表示它已经运行。如果回滚该迁移,Rails将从schema_migrations中删除相应的行。

例如,运行名为20120620193144_create_users.rb的迁移文件将在schema_migrations表中插入一个具有20120620193144版本的新行。

您可以随时使用早期版本引入迁移。Rails将始终运行schema_migrations中没有相应行的任何新迁移。前导数字不一定是时间戳,您可以将迁移称为001_blah.rb。早期版本的Rails使用这种格式,并对新生成的迁移使用顺序编号。后来的版本已经改用时间戳,以帮助防止多个开发人员独立生成具有相同数量的迁移。

最新更新