gpt4 book ai didi

ruby-on-rails - rake db::migrate 是如何工作的

转载 作者:数据小太阳 更新时间:2023-10-29 06:51:38 26 4
gpt4 key购买 nike

我刚刚真正开始使用 Ruby 和 Rails,我发现自己真正喜欢的事情之一就是它让您使用的约定。

我想在我自己的非 Ruby 项目中模仿这种行为。

我的问题是它实际上是如何工作的?我知道我可以查看 Rails 代码,但我的理解还不够深入,无法了解其中发生了什么。

我知道它需要一个基线脚本,然后针对它运行更新架构更改。但是它怎么知道它的版本是什么?我如何在另一个框架/数据库中模仿它?

最佳答案

注意:目前 Rails 2.x 也是如此。它可能不适用于 Rails 3,因为我花在 Rails 3 上的时间没有我希望的那么多。

Rails 创建了一个名为 schema_migrations 的特殊隐藏表。该表有一个名为 version 的列。对于您拥有的每个迁移,此列中都有一行。该值是与迁移文件名时间戳匹配的时间戳。

迁移时,它会按时间顺序查看所有迁移(由于基于时间戳的命名约定,也恰好按字母顺序排列)。对于每次迁移,它都会在 schema_migrations 表中查找匹配的行。如果找不到,则运行该迁移,并将时间戳添加到表中。如果它确实找到了一个,它会假设它已经运行并简单地跳过它。

结果是 2 个开发人员都可以按任何顺序提交迁移,这很好。这是因为 Rails 确切地知道哪些迁移已运行,哪些尚未运行,无论您的数据库何时第一次看到它们。

因此,要自己做这样的事情,您只需要一种方法来永久存储此状态,以了解哪些步骤已执行,哪些尚未执行。

关于ruby-on-rails - rake db::migrate 是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8235899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com