Что такое "роль" в Капистрано?

Какова цель и функция "ролей" в рецепте Капистрано? Когда я смотрю образцы рецептов, я часто вижу что-то вроде этого:

role :app, 'somedomain.com'
role :web, 'somedomain.com'
role :db,  'somedomain.com', :primary => true

Итак, похоже, что роль - это в основном сервер, где Capistrano выполняет команды. Если это так, то почему бы его назвать "ролью", а не "хозяином" или "сервером"?

В приведенном выше примере, какова разница между ролями :app и :web?

Что делает опция :primary => true?

Ответ 1

Роли позволяют писать задачи capistrano, которые применяются только к определенным серверам. Это действительно относится только к многосерверным развертываниям. Роли по умолчанию "app", "web" и "db" также используются внутри, поэтому их присутствие необязательно (AFAIK)

В предоставленном вами примере функциональной разницы нет.

": primary = > true" - это атрибут, который обеспечивает дополнительную детализацию при задании серверов в пользовательских задачах.

Вот пример спецификации роли в определении задачи:

task :migrate, :roles => :db, :only => { :primary => true } do
  # ...
end

См. веб-сайт capistrano @https://github.com/capistrano/capistrano/wiki/2.x-DSL-Configuration-Roles-Role для более подробного объяснения.

Ответ 2

Параметр ": primary = > true" указывает, что сервер базы данных является основным сервером. Это важно, например, когда вы хотите использовать репликацию с MySQL. Он позволяет создать другой зеркальный сервер базы данных, который можно использовать для автоматического переключения после сбоя. Он также используется для определения того, на каком сервере базы данных должны выполняться миграция модели (поскольку эти изменения будут реплицироваться на серверы отказоустойчивости). Эта ссылка разъясняет это немного больше: https://github.com/capistrano/capistrano/wiki/2.x-from-the-beginning#back-to-configuration