2016-06-02 21 views
1

Laufen habe ich eine Kappe Aufgabe, die mehr andere lange Laufkappe Aufgaben nennen:eine Capistrano Aufgabe im Hintergrund

kann also sagen, dass ich eine neue Aufgabe A

Innerhalb dieser Kappe Aufgabe I (je nach Bedingung genannt habe) Rufen Sie eine andere Cap-Task, sagen wir B. so etwas wie dieses

Kappe Aufgabe B sequentiell ruft 4 weitere Kappe Aufgaben c, D, E, &, F

So ist sein:

task :B do 
    on roles(:all) do 
     invoke 'tasks:C' 
     invoke 'tasks:D' 
     Rake::Task['db:E'].invoke("arg1", "arg2") 
     Rake::Task['db:F'].invoke("arg1", "arg2") 
    end 
end 

Jede C, D, E & F lange läuft und muss in der Reihenfolge wie angegeben sequenziell ausgeführt werden.

Grundsätzlich sind die Tasks C bis F db & Assets, die zip- und Upload-Aufgaben ausführen, die lange dauern können. Sie dürfen den Cap-Deployment-Prozess nicht behindern und sollten unabhängig im Hintergrund ausgeführt werden.

So brauche ich eine Möglichkeit, Task B von Task A zu starten, so dass es im asynchronen Modus ausgeführt wird, und Rest der Cap-Aufgaben während der Bereitstellung weiterhin ausgeführt werden.

+0

Zur Klärung: Sollen die Aufgaben C-F vor dem Abschluss des Capistrano-Laufs beendet werden, oder laufen die Hintergrundprozesse/Daemons lange? –

+0

Long running background process [Ich werde meine Frage aktualisieren] – adil

+0

Also C-F wird schließlich fertig, aber eine Bereitstellung kann als erledigt betrachtet werden, bevor sie tun? –

Antwort

1

Ich würde vorschlagen, Aufgabe B eine tatsächliche Rake-Aufgabe machen, und dann Capistrano Anruf und sofort Hintergrund, z. https://stackoverflow.com/a/5829142/3042016

+1

Danke, ich habe ein Ruby-Skript für alle vier Aufgaben zu einem zusammengefasst, es auf den Server hochgeladen und dann im Hintergrund mit 'nohup' ausgeführt. Lief wie am Schnürchen – adil