Capistrano,: роль db, для чего он нужен?
Насколько я могу судить, роль capistrano :db
используется только для запуска миграции.
(Таким образом, в большинстве случаев, вероятно, на самом деле не должен быть сервер, который запускает вашу базу данных. Почему у вас есть стек ruby /rails там (или разрешить там вход в систему ssh)? Это просто любой сервер, который вы хотите выполнить на самом деле миграция рельсов).
И только сервер, идентифицированный как роль db с :primary => true
, используется для запуска миграции.
Значит, любые другие серверы, определенные как роль "db", но без :primary => true
... используются вообще? Итак, почему созданный capify .
по умолчанию deploy.rb рекомендует вам их перечислить? Что бы вы даже перечислили здесь?
Что-нибудь мне не хватает?
Ответы
Ответ 1
Очевидно, что имя роли :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
У вас может быть настройка, включающая сервер основной базы данных и несколько подчиненных серверов. В некоторых случаях у вас может быть задача capistrano, которая должна выполняться на всех серверах баз данных. В других случаях вы можете выполнить задачу (например, перенос) только на главном сервере и разрешить изменения для распространения в подчиненных экземплярах.