Подтвердить что ты не робот

Capistrano,: роль db, для чего он нужен?

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

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

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

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

Что-нибудь мне не хватает?

4b9b3361

Ответ 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, которая должна выполняться на всех серверах баз данных. В других случаях вы можете выполнить задачу (например, перенос) только на главном сервере и разрешить изменения для распространения в подчиненных экземплярах.