Должны ли мы включать schema.rb
во время выполнения команды GIT? или мы должны игнорировать его? Каков правильный подход?
Каков правильный подход к работе с файлом Rails db/schema.rb в GIT?
Ответ 1
Ну, стандартный файл schema.rb
для Rails 2 имеет это в конце блока комментариев в верхней части файла:
# It strongly recommended to check this file into your version control system.
The Rails 3 schema.rb
, который я пинаю, говорит то же самое. Я думаю, что в комментарии говорится все.
Обновление в ответ на комментарии:
Да, ошибки могут быть сделаны, и вы можете получить противоречивые изменения и ошибки, искажающие ваш schema.rb
, но именно поэтому вы хотите, чтобы он находился под контролем версий, контроль версий позволяет вам отслеживать все и при необходимости делать резервные копии. Во всем исходном дереве есть только одна вещь, которая указывает вашу схему базы данных, а это schema.rb
. Ваша схема базы данных абсолютно является критическим артефактом, и все, что важно, нужно отслеживать в контроле версий.
Любые проблемы с обновлением/слиянием с schema.rb
должны быть отсортированы просто путем сортировки ваших конфликтующих миграций, поэтому schema.rb
будет исправлена как побочный эффект для фиксации реальной проблемы.
Да, schema.rb
является сгенерированным файлом, но он генерируется только в том смысле, что ваш текстовый редактор генерирует ваш файл модели pancakes.rb
или создается файл неотредактированного архива.
Да, вы можете восстановить свой файл schema.rb
, создав новую базу данных и затем выполнив все ваши миграции. Но вы должны время от времени очищать свои старые миграции, чтобы избежать необходимости проверять сотни файлов миграции каждый раз, когда вы rake db:migrate
, поэтому "перестраивать и запускать все миграции" часто не является вариантом в очень активном проекте.
Ответ 2
Ну, он по умолчанию не включен в .gitignore. Итак, я думаю, что у вас не было бы проблем, включая его (я делаю в своих проектах без каких-либо проблем).
Ответ 3
Да. Файл схемы используется для настройки вашей базы данных при использовании rake db: reset и других команд. Миграции должны использоваться только при изменении схемы базы данных и всегда будут приводить к созданию нового файла схемы.
Ответ 4
Я не прикрепляю этот файл к Git, потому что он создается при запуске rake db:migrate
.
Если я буду прикреплять этот файл к Git, я не могу вытаскивать новые изменения с сервера после каждого db:migrate
.