Rails: что делает schema.rb? - PullRequest
66 голосов
/ 27 марта 2012

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

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

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

Ответы [ 2 ]

99 голосов
/ 27 марта 2012

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

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

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

3 голосов
/ 09 февраля 2017

Rails Documentation / 6.1 Для чего нужны файлы схемы?

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

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

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

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

Рельсовые документы у вас есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...