Подтвердить что ты не робот

Rails: что делает schema.rb?

Раньше я думал, что db/schema.rb в проекте Rails хранит схему базы данных, так что ActiveRecord может знать, какую таблицу/столбец он имеет.

Но ранее я неожиданно заметил, что мой проект работает нормально после удаления db/schema.rb!

Итак, поскольку Rails может работать без него, что делает schema.rb действительно?

4b9b3361

Ответ 1

schema.rb выполняет в основном две цели:

  • Он документирует конечное текущее состояние схемы базы данных. Часто, особенно когда у вас больше нескольких миграций, трудно вычесть схему только из миграций. С подарком schema.rb вы можете просто посмотреть там. Сам ActiveRecord действительно не использует его. Это будет интроспекция базы данных во время выполнения, поскольку это намного безопаснее, чем ожидать, что пользователи будут поддерживать обновленный schema.rb. Однако, чтобы избежать путаницы с вашими разработчиками, вы всегда должны поддерживать файл, который обновляется с вашими миграциями.

  • Он используется в тестах для заполнения схемы базы данных. Поскольку такой rake db:schema:dump часто запускается как часть rake test:prepare run. Цель состоит в том, что схема тестовой базы данных точно соответствует текущей базе данных разработки.

Ответ 2

Документация Rails/6.1 Что такое файлы схемы для?

Миграции, могущественные, как они могут быть, не являются авторитетным источником для вашей схемы базы данных. Эта роль относится либо к db/schema.rb, либо к SQL файл, который генерирует Active Record, изучая базу данных. Oни не предназначены для редактирования, они просто представляют текущее состояние базы данных.

Нет необходимости (и это подвержено ошибкам) ​​для развертывания нового экземпляра приложение, переиздавая всю историю миграции. Это намного проще и быстрее просто загрузить в базу данных описание текущей схема.

Например, так создается тестовая база данных: текущая база данных разработки сбрасывается (либо в db/schema.rb, либо в db/structure.sql), а затем загружается в тестовую базу данных.

Файлы схемы также полезны, если вы хотите быстро взглянуть на то, что атрибуты объекта Active Record. Эта информация отсутствует в код модели и часто распространяется на несколько миграций, но информация прекрасно суммируется в файле схемы. annotate_models gem автоматически добавляет и обновляет комментарии вверху каждой модели, суммирующей схему, если вы желаете эту функциональность.

Вы разрешили документы Rails.