Развертывание только на одну роль / сервер с capistrano

Я пытаюсь создать несколько ролей, одну для живого, а другую для разработчика. Они выглядят так:

role :live, "example.com"
role :dev, "dev.example.com"

Однако когда я запускаю cap deploy, он выполняется для обоих серверов. Я пробовал следующее, и он всегда работает на обоих.

cap deploy live
cap ROLE=live deploy

Что мне не хватает? Я знаю, что могу написать настраиваемую задачу, которая отвечает только на одну роль, но я не хочу, чтобы мне приходилось писать целую кучу задач только для того, чтобы сказать ей, чтобы она реагировала на ту или иную роль. Спасибо!


person Sean Clark Hess    schedule 19.01.2010    source источник
comment
Все ответы ниже сбивают с толку / неверны. РОЛИ не действует как фильтр; скорее он инструктирует capistrano выполнить все задачи в этой роли. См. groups.google.com/forum/#!topic/capistrano/4gTyvcAtyAg   -  person steakchaser    schedule 28.09.2013


Ответы (4)


Попробуйте многоступенчатое капистрано:

http://weblog.jamisbuck.org/2007/7/23/capistrano-multistage

Роли предназначены для развертывания разных сегментов на разных серверах, а не для развертывания всей платформы только на одном наборе серверов.

person cwninja    schedule 20.01.2010

Capistrano Multistage определенно является решением для примера, который вы опубликовали для развертывания в средах. Что касается вашего вопроса о развертывании на ролях или серверах, у Capistrano также есть решения для командной строки.

Для развертывания с одной ролью (обратите внимание, что РОЛИ имеет множественное число):

cap ROLES=web deploy

Чтобы развернуть на несколько ролей:

cap ROLES=app,web deploy

Для развертывания на конкретном сервере (обратите внимание на HOSTS во множественном числе):

cap HOSTS=web1.myserver.com deploy

Для развертывания на нескольких серверах:

cap HOSTS=web1.myserver.com,web2.myserver.com deploy

Для развертывания на сервере (-ах) с ролью (-ями):

cap HOSTS=web1.myserver.com ROLES=db deploy
person scarver2    schedule 29.11.2012

Вы можете сделать что-то вроде этого:

task :dev do
    role :env, "dev.example.com"
end

task :prod do
    role :env, "example.com"
end

Затем используйте:

cap dev deploy
cap prod deploy
person Ken Struys    schedule 21.07.2010

Еще один совет: если вы используете многоступенчатую систему, не забудьте поставить константу ROLES перед командой cap.

ROLES=web cap production deploy

или после среды

cap production ROLES=web deploy

Если вы укажете первый параметр, multistage будет рассматривать его как имя этапа и заменять на значение по умолчанию:

cap ROLES=web production deploy

* [...] executing `dev'
* [...] executing `production'
person Maciej Majewski    schedule 23.06.2013