2016-07-06 7 views
1

Недавно я переключился с Capistrano 2 на Capistrano 3, многое изменилось, и у меня возникли некоторые проблемы, пытаясь адаптировать новый Capistrano к тому, что он делал с Capistrano 2 в проекте Я работаю на.Capistrano 3 Задачи, связанные с ролями

Самая большая проблема, с которой я сталкиваюсь в данный момент, - это фильтрование по ролям. Я знаю, что вы можете сделать:

ROLES=web,worker cap production deploy 

, но если у вас есть один сервер со всеми ролями, которые, кажется, ничего не делать на самом деле.

С Capistrano 2 я мог бежать:

cap worker deploy 

и все задачи, рабочие будут применяться. Capistrano 2 имел роли, указанные в задачах, и если роль не запрашивалась, задачи были пропущены (в большинстве случаев). Однако это не похоже на Capistrano 3, фильтр отлично работает в многосерверной среде, где у вас есть определенные серверы для каждой роли. Но если серверы разделяют роль или есть один, он становится немного странным. В новых задачах Capistrano, по-видимому, проверяется наличие хоста с заданной ролью, а не проверка выполнения задачи или нет на основе роли. Мне кажется, что ROLES предназначен для ограничения серверов, а не задач.

Так что я задаюсь вопросом, возможно ли это в Capistrano 3. Другой способ просмотра это группировать задачи под именем. Я хотел бы выбрать, какая группа задач выполняется.

Я могу добиться этого с помощью некоторых упражнений, я мог бы проверить, присутствует ли ROLES и пропустить задание или нет на нем, я мог бы выбрать, какие рецепты загружаться в зависимости от роли, я мог бы динамически присоединять задачи на основе ROLES var или, возможно, группировать задачи в именах файлов с именами и выполнять динамическую загрузку в зависимости от ROLES и т. д., но, возможно, есть что-то, чего я не вижу.

Любые мысли?

ответ

0

Мне кажется, что ROLES предназначен для ограничения серверов, а не задач.

Да, это точно. В Capistrano 3 задачи не имеют никакого отношения к ролям. В рамках задачи команды могут выполняться на серверах, которые соответствуют определенной роли. При фильтрации с использованием ROLES вы ограничиваете серверы, на которых выполняются команды, но вы не ограничиваете сами задачи.

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

Например:

# In deploy.rb 
task "worker" do 
    invoke "task1" 
    invoke "task2" 
    # etc. 
end 

Это определяет worker задачу, которая в свою очередь, выполняет конкретный перечень задач, которые могут быть все, что вы хотите. Затем вы можете запустить:

cap production worker 

Запуск всех этих рабочих задач на вашем производственном сервере.