Миграции Rails3 ActiveRecord при одновременном развертывании - PullRequest
5 голосов
/ 08 июля 2011

Как вы гарантируете, что ваши миграции запускаются только один раз, когда вы развертываете на нескольких машинах одновременно?

Что мне нужно сделать сейчас, это выбрать одну машину для запуска миграций, когда у меня естьизменение такого рода.В идеале развертывание бездумно, и процесс позаботился бы об этом для меня.

В настоящее время моя идея состоит в том, чтобы заставить мигратор искать схемы для миграции и получать блокировку, если у него есть что-то делать.Если блокировка уже получена, она полностью пропускает миграцию.Читая код ActiveRecord, он, похоже, не поддерживает такую ​​идею, поэтому ему понадобится несколько исправлений.

В чем ваша идея?

1 Ответ

2 голосов
/ 08 июля 2011

Вы используете Capistrano ? Вы можете указать список серверов баз данных и отметить один из них как Основной. Миграции будут выполняться только на этом сервере:

role :app, 'example.com.com'
role :web, 'example.com'
role :db,  'db01.example.com', :primary => true
role :db,  'db02.example.com'
role :db, 'db03.example.com'

EDIT: роль: db не предназначена для использования на отдельном сервере базы данных, на котором не запущен код приложения Rails. Это, вероятно, не ваша установка.

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