3

我是 Ruby On Rails 的新手,我使用的是 Rails 3.2.7 版本。

在 Rails 教程中,它提到“在命令行上,如果你运行“rake db:migrate”,你的数据库将升级到最新版本。”

有人可以澄清我这些问题吗?

  1. “您的数据库将升级到最新版本”是什么意思(我使用的是 MySQL 5,我在其中创建了 3 个数据库用于 Rails 开发、测试和生产)

  2. 我的数据库将使用哪些数据进行升级??

  3. 我手动创建了这 3 个数据库,并在 database.yml 文件中对其进行了配置。运行 rake db:migrate 是强制性的吗?

4

2 回答 2

4

3 ) 运行 db:migrate 不是强制性的。只需将数据库中的表名映射到应用程序中的模型名称,我们就可以访问应用程序中表的所有属性。使用迁移以便我们可以在应用程序中管理表和数据库(无需前往 mysql 终端创建表及其属性)。通常,当一个应用程序正在开发时,它的数据库结构会随着时间而变化,也就是说,当我们使用迁移来改变表的结构而不去 mysql 终端时,以及当我们从开发转移到生产时更多。我们不必再坐下来创建整个数据库结构。它已经在我们的迁移中,我们只需在生产模式下运行 db:migrate

2)我不确定(我的知识也会尽可能保留旧数据)

1)假设起初我的迁移和相应的模型说我只有 5 个属性,我运行 db:migrate 并在我的数据库中获取该表,经过几天的开发,我发现我需要 8 个属性。然后,我更改了迁移文件和模型中的结构,然后再次运行 db:migrate,然后我的数据库表结构将更新为三个新属性。

于 2012-09-17T11:41:36.967 回答
1

参考这个

Rails 提供了一组 rake 任务来处理迁移,这些迁移归结为运行某些迁移集。

您将使用的第一个与迁移相关的 rake 任务可能是 rake db:migrate。在其最基本的形式中,它只是为所有尚未运行的迁移运行 up 或 change 方法。如果没有这样的迁移,它就会退出。它将根据迁移日期按顺序运行这些迁移。

请注意,运行 db:migrate 还会调用 db:schema:dump 任务,该任务将更新您的 db/schema.rb 文件以匹配您的数据库结构。

如果您指定了目标版本,Active Record 将运行所需的迁移(向上、向下或更改),直到达到指定的版本。版本是迁移文件名的数字前缀。例如,要迁移到版本 20080906120000 运行

$ rake db:migrate VERSION=20080906120000

如果版本 20080906120000 大于当前版本(即,它正在向上迁移),这将对直到并包括 20080906120000 的所有迁移运行 up 方法,并且不会执行任何以后的迁移。如果向下迁移,这将在所有向下迁移到但不包括 20080906120000 的迁移上运行 down 方法。

于 2012-09-17T11:00:08.130 回答