2014-01-08 12 views
27

Gibt es eine Möglichkeit, eine Standardstufe in Capistrano 3 festzulegen?Standardstufe mit Capistrano 3 setzen

Ich habe versucht set :stage, :production innen deploy.rb setzen, aber das hat nicht funktioniert, gibt es den Fehler:

Stage not set, please call something such as `cap production deploy`, 
where production is a stage you have defined 

ich nur jetzt eine Stufe haben, so möchte ich in der Lage sein, nur cap deploy laufen und lassen Sie es auf dem Standard ausführen.

+5

ich heute gleiche Frage hinzufügen würde, aber ich dachte, dass ich nicht einige grundlegende, offensichtliche Option finden, leider scheint es nicht so offensichtlich ist, (wirklich seltsam) und es gibt fast keine Dokumentation in Bezug auf v3. – zrl3dx

Antwort

31

Capistrano v3 ist etwas von einem Wrapper um Rake, also müssen Sie erkennen, dass was wirklich passiert ist, dass eine production Aufgabe zuerst ausgeführt wird, gefolgt von einer deploy Aufgabe.

Wenn Sie es ein wenig debuggen, werden Sie feststellen, dass deploy.rb nicht geladen werden, wenn Sie eine Bühne geben Sie nicht auf. Dies liegt daran, dass die Aufgabe der Bühne darin besteht, dass deploy.rb geladen wird: Mit Blick auf lib/setup.rb wird für jede Phase eine Aufgabe definiert. Wenn er ausgeführt wird, setzt die Aufgabe der Bühne :stage, lädt die capistrano-Standardwerte und lädt schließlich Ihre deploy.rb-Datei.

So ein einfacher Trick wäre Capistrano zu sagen, die Bühne Aufgabe jedes Mal, wenn cap aufzurufen laufen diese bis zum Ende Ihrer Capfile durch Zugabe (nicht Ihre deploy.rb):

Rake::Task[:production].invoke 

oder, mit der invoke Methode von Capistrano DSL:

invoke :production 

Diese einige unbeabsichtigten Folgen haben kann, wenn Sie tatsächlich mehrere Stufen verwenden, aber wenn y Verwenden Sie nur die production Bühne, sollte es gut funktionieren.

Eine andere einfache Lösung könnte ein einfacher Shell-Alias ​​sein, wie alias cap='cap production', aber es funktioniert möglicherweise nicht gut, wenn Sie mehrere Projekte mit verschiedenen Stufennamen haben.

+0

Danke, das ist sehr hilfreich. Ich habe noch nie zuvor Rake benutzt, denke aber, dass es hilfreich sein könnte, die Rake-Dokumente zu lesen, um capistrano 3 besser zu verstehen. –

+0

Vielen Dank für diese Antwort! –

3

Nachdem ich cd in das RAILS Root-Verzeichnis, einfach den Befehl:

cap development deploy

scheint zu funktionieren. Früher war ich in der app/models Ordner und kam mit diesem Fehler den Befehl ausgeben:

Stage not set, please call something such as cap production deploy, where production is a stage you have defined.

-1

Sie können die folgende Zeile in deploy hinzuzufügen.rb, die Capistrano von erwarten eine Stufe verhindern:

set :stages, ["production"] 
2

Die alte Lösung funktioniert für mich in Capistrano 3:

cap --version 
#=> Capistrano Version: 3.3.5 (Rake Version: 10.4.2) 

An der Spitze des Capfile nach diesen Linien

# Load DSL and Setup Up Stages 
require 'capistrano/setup' 

hinzufügen:

set :stage, :production 

und dann Sie Aufgabe wie gewohnt ohne die Bühne laufen angegeben:

cap foo:bar 
+0

was meinst du mit 'cap foo: bar'? – VKatz

+0

Dies ist nur ein Beispiel für eine Aufgabe. Zum Beispiel könnte es (!) "Cap deploy: migrate" oder "cap cache: clear" sein. – Peter

Verwandte Themen