Здесь очень простой вопрос - если миграция может стать медленной и громоздкой, поскольку приложение становится все более сложным, и если rake db:schema:load
вместо этого у нас гораздо более чистый вызов, почему миграции вообще существуют?
Если ответ на вышесказанное состоит в том, что миграции используются для контроля версий (пошаговая запись изменений в базе данных), то, поскольку приложение становится более сложным и rake db:schema:load
используется вместо этого, продолжают ли они поддерживать свою основную функцию?
Внимание:
Из ответов на этот вопрос: rake db:schema:load
удалит данные на рабочем сервере, поэтому будьте осторожны при его использовании.
ruby-on-rails
ruby-on-rails-3
migration
sscirrus
источник
источник
Ответы:
Миграции обеспечивают изменения шага вперед и назад в базе данных. В производственной среде при развертывании необходимо вносить постепенные изменения в базу данных: миграции обеспечивают эту функцию с отказоустойчивостью отката. Если вы работаете
rake db:schema:load
на рабочем сервере, вы в конечном итоге удалите все свои производственные данные. Это опасная привычка.При этом, я считаю, что это хорошая практика, чтобы иногда «свернуть» миграцию. Это влечет за собой удаление старых миграций, замену их на одну миграцию (очень похожую на ваш
schema.rb
файл) и обновлениеschema_migrations
таблицы, чтобы отразить это изменение. Будьте очень осторожны при этом! Вы можете легко удалить свои производственные данные, если не будете осторожны.Как примечание, я твердо верю, что вы никогда не должны помещать создание данных в файлы миграции.
seed.rb
Файл может быть использован для этого, или пользовательских грабель или развернуть задачи. Помещение этого в файлы миграции смешивает спецификацию схемы базы данных с вашей спецификацией данных и может привести к конфликтам при запуске файлов миграции.источник
db:schema:load
если они пытаются запуститьdb:migrate
новую установку. @ clear_migrationsПросто наткнулся на этот пост, это было давно и не увидел ответа, которого я ожидал.
rake db:schema:load
Замечательно, когда вы впервые запускаете систему в производство. После этого вы должны запустить миграцию в обычном режиме.Это также поможет вам очистить ваши миграции в любое время, так как схема содержит всю информацию для запуска других машин в эксплуатацию, даже когда вы очистили свои миграции.
источник
db:schema:load
этого, кроме как сэкономить несколько секунд один раз на протяжении всего цикла разработки. Вы когда-нибудь работали с приложением, создание которого заняло более 30 секунд? В настоящее время я работаю над приложением, в котором есть ошибки в файлах миграции, и оно никогда не будет мигрировать без исправления ошибок или запуска,db:schema:load
что заставляет меня думать о схеме: нагрузка предназначена для случаев, когда что-то пошло не так в отношении разработки приложения.instead of editing schema.rb, please use the migrations feature
. Таким образом, если вы работаетеdb:schema:load
с автоматически сгенерированным файлом, который не имеет миграций для повторной автоматической генерации, вы фактически идете по пути ручного «редактирования» схемы и отмены миграций. Хотелось бы, чтобы в этом содержалась цитата из руководства по rails, но они не обсуждают schema: load, что пугающе усиливает мое разочарование при решении вопроса о подходе к схеме: load. = /rake db:schema:load
в противоположностьrake db:migrate
. Тогда вы можетеrake db:migrate
.Миграции также позволяют добавлять данные в БД. но db: schema: load загружает только схему.
источник
Потому что миграции можно откатить и предоставить дополнительную функциональность. Например, если вам нужно изменить некоторые данные как часть изменения схемы, вам нужно будет выполнить это как миграцию.
источник
Как пользователю других ORM, мне всегда казалось странным, что в Rails нет функции «синхронизации и обновления». т. е. с помощью файла схемы (который представляет собой всю современную схему), просмотрите существующую структуру БД и добавьте / удалите таблицы, столбцы, индексы по мере необходимости.
Для меня это было бы намного надежнее, даже если, возможно, немного медленнее.
источник
schema
это мастер, а не миграция.Я уже разместил в качестве комментария, но чувствую, что лучше поместить комментарии файла db / schema.rb здесь:
На самом деле мой опыт показывает, что лучше переносить файлы миграции в git, а не в файл schema.rb ...
источник
rake db:migrate
настроить таблицы в базе данных. Когда вы запускаете команду миграции, она ищет в db / migrate / любые рубиновые файлы и запускает их, начиная с самых старых. В начале каждого имени файла миграции есть метка времени.В отличие от
rake db:migrate
этого запускаются миграции, которые еще не выполнялись,rake db:schema:load
загружает схему, которая уже сгенерирована вdb/schema.rb
базу данных.Вы можете узнать больше о командах базы данных rake здесь .
источник