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