Rails如何跟踪为数据库运行的迁移?

Zac*_* Xu 89 activerecord ruby-on-rails

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

"Active Record跟踪哪些迁移已经运行,因此您只需更新源并运行rake db:migrate."

ActiveRecord如何实际执行此操作?Active Record在哪里存储数据?

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

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

我以前认为ActiveRecord使用时间戳跟踪上次迁移运行.但我认为这不正确,因为ActiveRecord正确运行从另一个代码分支合并的"较旧"迁移.

有内心知识的人可以详细说明吗?谢谢

mea*_*gar 158

Rails在数据库中创建一个表,schema_migrations用于跟踪已运行的迁移.

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

例如,运行名为的迁移文件20120620193144_create_users.rb20120620193144schema_migrations表中插入带有版本的新行.

您可以随时使用早期版本引入迁移.Rails将始终运行任何没有相应行的新迁移schema_migrations.前导数字不必是时间戳,您可以调用迁移001_blah.rb.早期版本的Rails使用此格式,并使用顺序编号进行新生成的迁移.更高版本已切换到时间戳,以帮助防止多个开发人员独立生成具有相同编号的迁移.

  • 很抱歉找到一个旧答案,但这真的解释了迁移背后的"魔力".我正在将我的rails数据库移动到新服务器并启动应用程序的第二个实例.我想知道如何处理新的迁移,这回答了它.感谢并感谢! (8认同)