schema.rb
сохраняет два ключевых набора данных:
- описание всех таблиц в структуре базы данных вашего приложения
- список всех примененных миграций.
Если новый разработчик присоединится к вашей команде, он должен иметь возможность запустить rake db:schema:load
и сразу получить обновленную структуру базы данных.Это гораздо эффективнее и надежнее, чем ожидать, что они пройдут все миграции вручную.
Запуск rake db:migrate
, даже если нет ожидающих выполнения миграций, которые необходимо запустить, всегда будет восстанавливать db/schema.rb
.В большинстве случаев вы не заметите, потому что файл будет таким же, но вы можете получить различия в форматировании пробелов или порядке столбцов.
Лучшая практика (IMHO) всегда должна проверяться в обновленном db/schema.rb
в том же коммите, что и любые миграции, которые вы добавили.
При извлечении или извлечении веток на локальный компьютер, запуск rake db:migrate
будет применяться для любых новых миграций, которые необходимо выполнить на основе записей в таблице schema_migrations
вашей локальной базы данных.После этого ваш новый db/schema.rb
должен быть таким же, как тот, который вы вытащили, но если это не так, git diff
покажет вам, в чем разница.
Затем вы можете сделать суждение о том, как лучше поступить.Если единственное различие носит косметический характер, я лично склонен отменить непатентованные изменения и оставить принятую версию без изменений до следующей миграции.
Все вышесказанное также применимо, если вы переключились на файл структуры на основе SQL (db/structure.sql
), указав config.active_record.schema_format = :sql
в config/application.rb
.