Почему schema.rb обновляется после запуска db: migrate for Rails? - PullRequest
0 голосов
/ 27 сентября 2018

Насколько я понимаю, тот, кто создал миграции, должен был также обновить schema.rb.Так как я вытащил миграции, я должен был также вытащить обновленный schema.rb.Однако время от времени schema.rb обновляется после запуска bundle exec rake db:migrate.

Мой текущий рабочий процесс:

  1. git pull --rebase origin master --prune

  2. rails s

  3. Rails подсказывает мне мигрировать

  4. bundle exec rake db:migrate

  5. Осознайте schema.rb обновлено

На данный момент, я почти уверен, что я не должен проверять в обновленном schema.rb.Я бы вручную вернул его через git checkout origin/master db/schema.rb.

Так что же пошло не так в этом случае?Сотрудник забыл запустить миграции после их создания?Я сделал что-то не так?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

schema.rb сохраняет два ключевых набора данных:

  1. описание всех таблиц в структуре базы данных вашего приложения
  2. список всех примененных миграций.

Если новый разработчик присоединится к вашей команде, он должен иметь возможность запустить 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.

0 голосов
/ 28 сентября 2018

Насколько я знаю, схема может измениться после запуска rails db: migrate из-за:

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

Запуск git diff поможет вам понять, что происходит.

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