2012-03-20 5 views
12

Насколько я могу судить, роль capistrano :db используется только для запуска миграции.capistrano,: db role, для чего он нужен?

(Таким образом, в большинстве случаев это, вероятно, не должно быть на самом деле сервер, который работает базы данных. Почему у вас есть рубин/рельсы укладывают там (или позволить SSH логинов там)? Это просто то, что сервер, который вы хотите для фактического выполнения миграции рельсов).

И только сервер, идентифицированный как роль db с :primary => true, используется для запуска миграции.

Значит, любые другие серверы, идентифицированные как роль «db», но без :primary => true ... используются ни для чего? Итак, почему default deploy.rb, созданный capify ., рекомендует вам их перечислить? Что бы вы даже перечислили здесь?

Все, что мне не хватает?

ответ

21

Очевидно, что имя роли :db не соответствует действительности. Как вы указали, Capistrano определяет его (с :primary => true) в качестве хоста, который мы выполняем rake db:migrate, но серверы баз данных не всегда работают на таких хостах. Мы можем изменить схему удаленного сервера базы данных через приложение Rails. Правильное имя роли для этого типа хоста не :db.

Исходя из комментариев по lib/capistrano/configuration/roles.rb, исходное значение роли :db является хостом, на котором работают серверы баз данных. Ожидается, что мы войдем в хосты :db и выполним некоторые задачи.

Дизайнеры Capistrano должны были определить роль :migration или что-то еще для задачи deploy:migrate. Но связь между ролью :db с этой задачей была определена шесть лет назад с 9a6d2fb и с тех пор не изменилась.

Вообще говоря, пользователи Capistrano могут определять роли и свободно связывать их с задачами. Задача deploy:migrate предоставляется как рецепт для разработчиков Rails. К сожалению, этот рецепт включает неправильное представление о том, как мы делаем миграцию базы данных и широко используется в течение длительного времени.

+2

Теперь вы можете изменить имя роли для миграций (что также рекомендуется): https://github.com/capistrano/rails#recommendations – NobodysNightmare

4

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

+0

Вы можете привести любой пример задачи, которая будет выполняться на всех серверах баз данных? В этом случае означает ли это фактические хосты, на которых запущена сама база данных? – jrochkind

+0

Да. Один сервер МОЖЕТ выполнять несколько ролей, но это не обязательно. Во многих случаях вы можете масштабировать свою базу данных с помощью одного ведущего и нескольких подчиненных устройств. Возможно, вы захотите выполнить миграцию данных только на основном (основном) сервере, но, возможно, если вы включили ведение журнала для всех экземпляров базы данных, вам может понадобиться ударить их все и архивировать файлы журнала. –

Смежные вопросы