ChatGPT解决这个技术问题 Extra ChatGPT

Rails 如何跟踪数据库的哪些迁移?

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

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

ActiveRecord 实际上是如何做到这一点的? Active Record 将数据存储在哪里?

我怀疑这可能存储在数据库本身中?在某处的桌子上。

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

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

有内幕的人可以详细说明吗?谢谢

我相信它在数据库中有一个可以跟踪的表。

u
user229044

Rails 在您的数据库中创建一个名为 schema_migrations 的表来跟踪已运行的迁移。

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

例如,运行名为 20120620193144_create_users.rb 的迁移文件会将版本为 20120620193144 的新行插入到 schema_migrations 表中。

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


当您混合使用可安装引擎和虚拟应用程序时特别有用

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅