2015-10-17 87 views
2

我想知道是否需要在Ruby on Rails中运行迁移以使模型正常工作。是否需要在Ruby on Rails中迁移数据库?

我真的很喜欢使用MySQL Workbench设计数据库,它提供了一个导出选项,可以在后期轻松创建数据库,所以我想知道从Rails“迁移”数据库是否真的使模型变得有些东西,比如让他们知道表存在或类似的东西。

我在问这个,因为当我运行rake db:migrate时,在db文件夹中创建一个新文件:schema.rb与数据库的信息。

随着更多的信息,我使用这些版本:

  • 红宝石 - 红宝石2.1.5p273(2014-11-13修订48405)I386-的mingw32]
  • Ruby on Rails的 - 的Rails 4.2 .4

谢谢。

+0

当你运行'rake db:migrate'时,你的数据库模式被更新。如果不运行迁移,属性将不会添加到您的模式中,因此在实际数据库中将不可用。您可以在应用程序目录中的'db/schema.rb'中查看架构。 – sugaryourcoffee

回答

3

Rails不会强制您使用迁移。如果你没有定义迁移,但以其他方式定义你的数据库,那么所有东西都可以正常工作。

如果您定义了迁移,那么Rails会跟踪它们是否已经运行(在第一次运行迁移时,Rails会为此创建一个新的数据库表,schema_migrations),并且抱怨如果你还没有运行它们。如果你不打算使用迁移,那么在db/migrations中没有任何东西。

您仍然可以从现有数据库生成schema.rb,只需运行bundle exec rake db:schema:dump即可。但是,运行的Rails应用程序不使用schema.rb文件,如果您还没有schema.rb,Rails也可以正常工作。 AR模型通过从应用程序启动时的数据库实时获取数据库表的信息,但他们没有从schema.rb中获取它。但是schema.rb对于在新数据库中重新创建模式很有用(即使不使用迁移,但是可以转储schema.rb,仍然可以使用它来重新创建相同的模式)。

迁移非常有用,大多数Rails都喜欢它们。它们可以让您跟踪git中控制的源代码中db数据库模式的变化,并且可以及时回滚或前进到其他数据库模式点。您还可以使用迁移来实际修改数据,而不仅仅是模式,并且仍然准确记录您在迁移中执行的修改/迁移数据的操作。如果不止一个开发人员在代码上进行协作,迁移尤其(但不仅仅是)有用,因为您可以更轻松地合并模式更改,因为它们在源代码中作为迁移进行跟踪。

迁移生成的模式更改也为您处理一些rails约定,例如默认创建名为id的主键,并且如果您要求创建标准Rails updated_at或created_at列,

但是,如果你不想使用迁移,你不必,Rails将会非常高兴。

+0

谢谢你,这是一个明确的答案,非常有用。 –

0

如果您自己构建数据库,没有理由创建迁移文件和db:migrate。不过,让Rails做到这一点是有好处的。一个是Rails期望一个特定的结构,如果你这样做,你会手动复制它。此外,如果您决定移植到postgresql或其他数据库,Rails可以使用它现在用于mysql的相同模式为您构建它。

+0

为什么要选择MySQL上的PostgreSQL? –

+0

我并不是想暗示你应该迁移,只是如果你决定移植到另一个数据库,它变得更容易。对困惑感到抱歉! –

+0

好吧,我明白了,谢谢 –

2

使用迁移系统中的Rails的主要原因是架构...

enter image description here

这是位于db/schema.rb,基本存储列数据库中的每个表。

除了明显的恢复类似rake db:schema:load(删除所有数据)的数据库的能力之外,该架构还具有为您添加/附加到基准的额外好处。

很多人甚至不看他们的Rails数据库 - 如果你这样做的话,那太棒了。你应该做的重点是确保你的桌子尽可能高效和多功能;许多人的桌子都是一团糟。

+0

您可以创建schema.rb文件而无需使用迁移。 'rake db:schema:dump' – jrochkind

相关问题