Mysql 在RubyonRails中迁移数据库需要吗?

Mysql 在RubyonRails中迁移数据库需要吗?,mysql,ruby-on-rails,ruby,Mysql,Ruby On Rails,Ruby,我想知道是否需要在RubyonRails中运行迁移才能使模型正常工作 我真的很喜欢使用MySQL Workbench设计数据库,它提供了一个导出选项,可以在以后轻松创建数据库,所以我想知道,从Rails“迁移”数据库是否真的对模型产生了影响,比如让他们知道表存在或者类似的事情 我这样问是因为当我运行rake db:migrate时,会在db文件夹中创建一个新文件:schema.rb,其中包含数据库的信息 作为补充信息,我使用以下版本: Ruby-Ruby 2.1.5p273(2014-11-1

我想知道是否需要在RubyonRails中运行迁移才能使模型正常工作

我真的很喜欢使用MySQL Workbench设计数据库,它提供了一个导出选项,可以在以后轻松创建数据库,所以我想知道,从Rails“迁移”数据库是否真的对模型产生了影响,比如让他们知道表存在或者类似的事情

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

作为补充信息,我使用以下版本:

  • Ruby-Ruby 2.1.5p273(2014-11-13修订版48405)[i386-mingw32]
  • RubyonRails-Rails4.2.4

谢谢。

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

Rails不会强迫您使用迁移。如果您不定义迁移,而是以其他方式定义数据库,那么一切都将正常工作

如果您定义了迁移,那么Rails将跟踪它们是否已运行(当您第一次运行迁移时,Rails实际上为此创建了一个新的数据库表,
schema_migrations
),如果您没有运行它们,Rails会抱怨。如果您不打算使用迁移,则在db/migrations中没有任何内容

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

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

迁移生成的模式更改也会为您考虑一些rails约定,比如默认情况下创建一个名为
id
的主键,如果您要求,还可以创建标准rails更新列或创建列


但是,如果您不想使用迁移,那么Rails将非常乐意

在Rails中使用迁移系统的主要原因是模式

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

除了使用类似于
rake db:schema:load
(删除所有数据)的方法恢复数据库之外,模式还有一个额外的好处,即为您提供了一个添加/附加到的基准


许多人甚至不看他们的Rails数据库——如果你看了,那就太好了。你应该强调的一点是确保你的桌子尽可能的高效和多功能;许多人的表都是一团糟。

当您运行
rakedb:migrate
时,您的数据库模式会得到更新。如果不运行迁移,属性将不会添加到模式中,因此在实际数据库中不可用。您可以查看应用程序目录中的
db/schema.rb
中的模式。为什么我应该选择PostgreSQL而不是MySQL?我不是想暗示您应该迁移,只是如果您决定移植到另一个数据库,那么迁移会变得更容易。抱歉搞混了!您可以在不使用迁移的情况下创建schema.rb文件<代码>rake db:schema:dump