Ich suche nach einer Möglichkeit, eine einzelne Capistrano-Aufgabe aufzurufen, um verschiedene Aufgaben für verschiedene Rollen auszuführen. Kann Capistrano dies tun, oder muss ich für jede Rolle eine bestimmte Aufgabe schreiben?Erstellen einer Capistrano-Aufgabe, die verschiedene Aufgaben basierend auf der Rolle ausführt
Antwort
Die Standard-Weg, dies in Capistrano zu tun:
task :whatever, :roles => [:x, :y, :z] do
x_tasks
y_tasks
z_tasks
end
task :x_tasks, :roles => :x do
#...
end
task :y_tasks, :roles => :y do
#...
end
task :z_tasks, :roles => :z do
#...
end
Also ja, Sie getrennte Aufgaben schreiben müssen, aber man kann sie von einer übergeordneten Aufgabe nennen, und sie werden in geeigneter Weise filtern.
Eigentlich nicht:
% cat capfile
server 'localhost', :role2
task :task1, :roles=>:role1 do
puts 'task1'
end
task :task2 do
task1
end
% cap task2
* executing `task2'
* executing `task1'
task1
Die: Rollen param weiter geleitet wird, Befehl usw. zu laufen, aber scheint nicht zu beeinflussen, ob die Aufgabe tatsächlich ausgelöst wird.
Entschuldigung, habe nicht den Weg gefunden, einen Kommentar zu kommentieren, also habe ich es hier geschrieben.
Es gibt einen Weg, irgendwie. Überprüfen Sie: http://weblog.rubyonrails.org/2006/8/30/capistrano-1-1-9-beta/ und Sie werden sehen, dass Sie die Standardrollen mithilfe der Umgebungsvariablen ROLES überschreiben können.
Ich habe eine Aufgabe wie folgt definiert:
desc "A simple test to show we can ssh into all servers"
task :echo_hello, :roles => :test do
run "echo 'hello, world!'"
end
Die :test
Rolle zu einem Server zugewiesen wird.
Auf der Kommandozeile kann ich laufen:
[[email protected] bin]$ cap echo_hello ROLES=lots_of_servers
Und wird die Aufgabe nun auf der lots_of_servers Rolle laufen.
Ich habe nicht verifiziert, dass dies in einem Ruby-Skript funktioniert, indem Sie den ENV
Hash aktualisieren, aber das ist ein guter Anfang.
können Sie auch
task :foo do
run "command", :roles => :some_role
upload "source", "destination", :roles => :another_role
end
Verwenden Namespacing tun: https://github.com/leehambley/capistrano-handbook/blob/master/index.markdown#namespacing-tasks
namespace :backup do
task :default do
web
db
end
task :web, :roles => :web do
puts "Backing Up Web Server"
end
task :db, :roles => :db do
puts "Backing Up DB Server"
end
end
diese Aufgaben zeigen sich in einer Kappe -T als
backup:default
backup:web
backup:db
Nur für das Protokoll, das könnte eine Lösung mit Capistrano 3 sein:
desc "Do something specific for 3 different servers with 3 different roles"
task :do_something do
on roles(:api_role), in: :sequence do
# do something in api server
end
on roles(:app_role), in: :sequence do
# do something in application server
end
on roles(:another_role), in: :sequence do
# do something in another server
end
end
Sever Definition „do_something“ Aufgabe in einem Anwendungsserver wäre ausführen etwas wie:
server 'application.your.domain', user: 'deploy', roles: %w{app_role}
Dann können Sie die Aufgabe aufrufen (es gibt mehrere Möglichkeiten, es zu tun) und die Aufgabe wird Führe bestimmte Anweisungen gemäß der "app_role" aus.
- 1. Link ausblenden basierend auf Rolle
- 2. Wie führt ein Server verschiedene Aufgaben basierend auf der Clienteingabe aus?
- 3. Erstellen einer Matrix basierend auf der Gruppenmitgliedschaft
- 4. Anzeige des Teils der Befehlsspalte basierend auf der Rolle
- 5. Flask-Admin Rollenbasierter Zugriff - Zugriff basierend auf der Rolle ändern
- 6. Wie url basierend auf der Rolle verweigert werden
- 7. Wie man zwei asynchrone Aufgaben nacheinander ausführt?
- 8. Verschiedene Arten der Bestellung von Aufgaben
- 9. ansible: Rolle in einer Rolle einschließen?
- 10. Feder Sicherheit Umleitung basierend auf Rolle
- 11. Kann Capistrano Variablen basierend auf einer Rolle festlegen?
- 12. Erstellen von Aufgaben mit einer Schleife [Schluck]
- 13. Wie man pandas drop_duplicates basierend auf der Indexspalte ausführt
- 14. Benutzerdefinierte Ansichten für cgridview basierend auf Rolle
- 15. Erstellen einer Aufgabe, die eine Reihe von Weiter Aufgaben
- 16. Verschiedene Validatoren basierend auf Eingabe
- 17. Verschiedene hitArea basierend auf Geräte
- 18. Erstellen Sie verschiedene Inhalte auf einer Seite
- 19. verschiedene CSS-Klassen zuweisen basierend auf ID
- 20. (Mac) Erstellen einer Xcode-App, die Shell-Skripte ausführt
- 21. App Engine: verschiedene app.yaml-Dateien basierend auf der Umgebung
- 22. Erstellen einer Factory-Methode basierend auf Parametern
- 23. Programmgesteuertes Erstellen neuer Instanzen einer Worker-Rolle
- 24. Verschiedene Formularaktionen basierend auf ausgewählten Änderungsereignissen
- 25. Erstellen einer Ansicht basierend auf den Verlaufstabellen
- 26. Wie kann jQuery verschiedene Elemente basierend auf einer Variablen zeigen
- 27. Ändern der Datei web.config basierend auf einer Umgebungsvariablen in ASP.NET
- 28. Verschiedene Controller in Angular basierend auf Authentifizierung
- 29. Nach dem Erstellen, Rolle
- 30. Aufteilung einer Excel-Tabelle in verschiedene Arbeitsblätter basierend auf Spaltenüberschriften
Dies hat bei mir nicht funktioniert, alle drei Aufgaben werden ausgeführt. – aceofspades
Hat auch nicht für mich gearbeitet. Alle Aufgaben werden ausgeführt. –
Funktioniert hier auch nicht – Fluffy