Есть ли драгоценный камень, чтобы заставить Git и Rails работать вместе для более надежной миграции? - PullRequest
2 голосов
/ 24 марта 2012

Я слышал раньше, что миграции на Rails несовершенны, но до недавнего времени я никогда не сталкивался с подобным примером. Теперь я понимаю, что если миграция зависит от определенного состояния кода , то у вас возникнут проблемы, если вы попытаетесь клонировать репо через два года и выполнить все миграции (как много они будут зависеть от более старых версий кода).

Я думал, что у этого парня была хорошая идея:

http://www.mattdipasquale.com/blog/2011/02/28/rails-model-safe-migrations/

Есть ли что-то вроде этого: гем (скажем) для автоматической проверки коммита, в который была добавлена ​​каждая миграция, вплоть до HEAD?

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

Ответы [ 2 ]

1 голос
/ 24 марта 2012

Отличная причина для версии вашей базы данных schema.rb.

Журнал изменений git покажет, когда изменился schema.rb, и выдаст вам хеш коммита.

1 голос
/ 24 марта 2012

Я думаю, что есть 2 случая, которые могут произойти, и в каждом случае решение отличается:

  1. Вы разрабатываете код и доставляете его с небольшими приращениями. Решение где-то запущено, в нем есть данные, и вы должны переносить его каждый раз, когда поставляете новую версию.

    ==> Rails - прекрасный ответ на то, как разрабатывать и выпускать новые версии. Я делаю это все время (с двумя приложениями, где я единственный пользователь), и никогда не было проблем.

  2. Вы разрабатываете код и выпускаете множество небольших выпусков (с первым подходом). Затем вы хотите создать его экземпляр на новом сервере без каких-либо данных, хранящихся там.

    ==> Тогда дамп вашей схемы и загрузка ее на новый сервер - лучший способ, просто чтобы убедиться, что все на месте.

Я не знаю Capistrano, возможно, есть варианты сделать это по-другому. Поэтому, если у вас есть что-то похожее на сценарий 1, используйте подход Rails, в случае сценария 2 используйте подход dump-and-load.

...