2016-07-06 21 views
1

Ich habe vor kurzem von Capistrano 2 auf Capistrano 3 gewechselt, viel hat sich geändert, und ich habe einige Probleme damit, das neue Capistrano an das anzupassen, was es mit Capistrano 2 im Projekt gemacht hat Ich arbeite an.Capistrano 3 Rollenspezifische Aufgaben

Das größte Problem, dem ich im Moment gegenüberstehe, ist das Filtern nach Rollen. Ich weiß, was Sie tun können:

ROLES=web,worker cap production deploy 

aber wenn Sie einen einzelnen Server mit allen Rollen haben, das scheint wirklich nichts zu tun.

Mit Capistrano 2 Ich konnte laufen:

cap worker deploy 

und alle Arbeitsaufgaben angewendet werden würde. In Capistrano 2 wurden die Rollen für die Aufgaben angegeben, und wenn die Rolle nicht angefordert wurde, wurden die Aufgaben (in den meisten Fällen) übersprungen. Bei Capistrano 3 scheint dies jedoch nicht der Fall zu sein. Der Filter eignet sich hervorragend für eine Multi-Server-Umgebung, in der Sie spezifische Server für jede Rolle haben. Aber wenn Server eine Rolle teilen oder wenn es eine einzige gibt, wird es ein bisschen komisch. In den neuen Capistrano-Aufgaben scheint zu prüfen, ob ein Host mit einer bestimmten Rolle vorhanden ist, anstatt zu prüfen, ob die Aufgabe basierend auf der Rolle ausgeführt werden soll oder nicht. Es scheint mir, dass ROLES eher die Server als die Aufgaben begrenzen soll.

Also ich frage mich, ob dies in Capistrano 3 möglich ist. Eine andere Möglichkeit, dies anzuzeigen, ist die Gruppierung von Aufgaben unter einem Namen. Ich möchte auswählen, welche Gruppe von Aufgaben ausgeführt werden.

Ich kann dies mit etwas Basteln erreichen, ich könnte prüfen, ob ROLES vorhanden ist und eine Aufgabe überspringen oder nicht basierend darauf, ich könnte auswählen, welche Rezepte je nach Rolle geladen werden, konnte ich die Aufgaben auf der ROLES dynamisch anhängen var, oder gruppieren Sie die Aufgaben in der Rolle benannte Dateien und machen Sie das dynamische Laden abhängig von ROLES, etc., aber vielleicht gibt es etwas, das ich vermisse.

Irgendwelche Gedanken?

Antwort

0

Es scheint mir, dass ROLES eher die Server als die Aufgaben begrenzen soll.

Ja, das stimmt genau. In Capistrano 3 haben Aufgaben keinerlei Bezug zu Rollen. Innerhalb einer Aufgabe können Befehle auf Servern ausgeführt werden, die einer bestimmten Rolle entsprechen. Wenn Sie mithilfe von ROLES filtern, beschränken Sie die Server, auf denen die Befehle ausgeführt werden, aber Sie beschränken die Aufgaben nicht selbst.

Eine Möglichkeit zur Begrenzung von Aufgaben besteht darin, eine eigene Aufgabe auf hoher Ebene zu definieren, die die gewünschten Aufgaben aufruft.

Zum Beispiel:

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

Dies definiert eine worker Aufgabe, die wiederum eine bestimmte Liste von Aufgaben ausführt, die sein kann, was Sie wollen. Dann können Sie ausführen:

cap production worker 

Welche wird alle diese Worker-bezogene Aufgaben auf Ihrem Produktionsserver ausführen.