rake db:migrate实际上会做什么?

时间:2012-09-17 09:49:33

标签: ruby-on-rails-3 ruby-on-rails-3.2

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:4)

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

2)我不确定(我的知识也是如此,以便尽可能保留旧数据)

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

答案 1 :(得分:1)

参考this

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方法,并且不会执行任何以后的迁移。如果向下迁移,这将在所有迁移上运行down方法,但不包括20080906120000。