The schema.rb serves mainly two purposes:
-
It documents the final current state of the database schema. Often, especially when you have more than a couple of migrations, it’s hard to deduce the schema just from the migrations alone. With a present
schema.rb, you can just have a look there. ActiveRecord itself will indeed not use it. It will introspect the database during runtime as this is much safer than to expect users to keep theschema.rbup-to-date. However to avoid confusion of your developers, you should always maintain a file that is up-to-date with your migrations. -
It is used by the tests to populate the database schema. As such a
rake db:schema:dumpis often run as part of the raketest:preparerun. The purpose is that the schema of the test database exactly matches the current development database.