Ich habe bereits eine deploy.rb, die meine App auf meinem Produktionsserver bereitstellen kann.
Meine App enthält eine benutzerdefinierte Rake-Task (eine .rake-Datei im Verzeichnis lib / task).
Ich möchte eine Cap-Task erstellen, mit der diese Rake-Task remote ausgeführt wird.
ruby
rake
capistrano
Richard Poirier
quelle
quelle
#{rake}
Variablen von capistrano erklären ? Es scheint nicht immer die beste Option zu sein.Antworten:
Etwas expliziter in Ihrem
\config\deploy.rb
, fügen Sie außerhalb einer Aufgabe oder eines Namespace hinzu:Dann können
/rails_root/
Sie von ausführen:quelle
... ein paar Jahre später ...
Schauen Sie sich das Rails-Plugin von capistrano an, das Sie unter https://github.com/capistrano/rails/blob/master/lib/capistrano/tasks/migrations.rake#L5-L14 sehen können. Es kann ungefähr so aussehen:
quelle
run
werden, funktionieren auf Capistrano bis Version 2. Ab Version 3 ist dies der richtige Weg.Capistrano 3 Generische Version (jede Rechenaufgabe ausführen)
Erstellen einer generischen Version von Mirek Rusins Antwort:
Anwendungsbeispiel:
cap staging "invoke[db:migrate]"
Beachten Sie, dass
deploy:set_rails_env
erfordert, kommt von der Capistrano-Schienen Edelsteinquelle
rake args[:command]
mitexecute :rake, "#{args.command}[#{args.extras.join(",")}]"
Ihnen können eine Aufgabe mit mehreren Argumenten ausführen wie folgt:cap production invoke["task","arg1","arg2"]
cap staging invoke['task[arg1\,arg2]']
. Ich bevorzuge diesen Ansatz gegenüber dem von Ihnen erwähnten, da er den tatsächlichen Aufruf von Rake widerspiegelt. Mit diesem Ansatz können Sie auch mehrere Aufgaben verketten, was häufig nützlich ist :cap staging invoke['task1 task2[arg1] task3[arg2\,arg3]']
. Funktioniert für Rake 10.2.0 oder neuerGefunden bei Google - http://ananelson.com/said/on/2007/12/30/remote-rake-tasks-with-capistrano/
Das
RAILS_ENV=production
war ein Gotcha - ich habe zuerst nicht daran gedacht und konnte nicht herausfinden, warum die Aufgabe nichts tat.quelle
"cd #{deploy_to}/current && #{rake} <task_name> RAILS_ENV=production"
Verwenden Sie Rake-Aufrufe im Capistrano-Stil
Es gibt einen gängigen Weg, der "nur funktioniert"
require 'bundler/capistrano'
und andere Erweiterungen, die Rake modifizieren. Dies funktioniert auch in Vorproduktionsumgebungen, wenn Sie mehrstufig arbeiten. Das Wesentliche? Verwenden Sie config vars, wenn Sie können.quelle
top.run
anstelle von nurrun
top
gerade die Dokumente für die Methode gefunden . In dem Fall, in dem wirrun
im selben Namespace definiert haben,top.run
ist dies erforderlich, andernfalls sollte die oberste Ebenerun
auch dann gefunden werden, wenn die Aufgabe einen Namespace hat. Habe ich etwas verpasst Was ist in deinem Fall passiert?Benutze den
capistrano-rake
EdelsteinInstallieren Sie das Juwel einfach, ohne sich mit benutzerdefinierten Capistrano-Rezepten herumzuschlagen, und führen Sie die gewünschten Rake-Aufgaben auf Remote-Servern wie folgt aus:
Vollständige Offenlegung: Ich habe es geschrieben
quelle
Ich persönlich verwende in der Produktion eine Hilfsmethode wie diese:
Dies ermöglicht das Ausführen einer Rechenaufgabe ähnlich der Verwendung der Methode run (Befehl).
HINWEIS: Es ähnelt dem, was Duke vorgeschlagen hat, aber ich:
quelle
Es ist ein interessantes Juwel Umhang , die Ihre Rake Aufgaben als Capistrano Aufgaben macht, so können Sie sie remote ausgeführt.
cape
ist gut dokumentiert, aber hier ist eine kurze Übersicht über die Einrichtung von i.Fügen Sie dies nach der Installation des Edelsteins einfach Ihrer
config/deploy.rb
Datei hinzu.Jetzt können Sie alle Ihre
rake
Aufgaben lokal oder remote ausführencap
.Als zusätzlichen Bonus
cape
können Sie festlegen, wie Sie Ihre Rake-Aufgabe lokal und remote ausführen möchten (nicht mehrbundle exec rake
). Fügen Sie dies einfach zu Ihrerconfig/deploy.rb
Datei hinzu:quelle
quelle
RAILS_ENV=production
aufRAILS_ENV=#{rails_env}
ändern, funktioniert es auch auf meinem Staging-Server.Folgendes habe ich in meine deploy.rb eingefügt, um das Ausführen von Rake-Aufgaben zu vereinfachen. Es ist ein einfacher Wrapper um die run () -Methode von capistrano.
Dann führe ich einfach eine Rechenaufgabe wie folgt aus:
quelle
Das hat bei mir funktioniert:
Dann einfach laufen
cap production "invoke[task_name]"
quelle
Das meiste davon kommt von oben mit einer kleinen Verbesserung, um jede Rechenaufgabe von Capistrano aus auszuführen
Führen Sie eine beliebige Rechenaufgabe von Capistrano aus
quelle
Das funktioniert auch:
Weitere Infos: Capistrano Run
quelle
Wenn Sie mehrere Argumente übergeben möchten, versuchen Sie Folgendes (basierend auf der Antwort von marinosbern):
Dann können Sie eine Aufgabe wie folgt ausführen:
cap production invoke["task","arg1","arg2"]
quelle
Also habe ich daran gearbeitet. es scheint gut zu funktionieren. Sie benötigen jedoch einen Formatierer, um den Code wirklich nutzen zu können.
Wenn Sie keinen Formatierer verwenden möchten, setzen Sie die Protokollebene einfach auf den Debug-Modus. Diese semas zu h
Cap Stuff
Dies ist der Formatierer, den ich erstellt habe, um mit dem obigen Code zu arbeiten. Es basiert auf dem in das sshkit integrierten: Textsimple, ist jedoch keine schlechte Methode, um benutzerdefinierte Aufgaben aufzurufen. Oh, so viele funktionieren nicht mit der neuesten Version von sshkit gem. Ich weiß, dass es mit 1.7.1 funktioniert. Ich sage dies, weil der Hauptzweig die verfügbaren SSHKit :: Command-Methoden geändert hat.
quelle
Frühere Antworten haben mir nicht geholfen und ich fand dies: Von http://kenglish.co/run-rake-tasks-on-the-server-with-capistrano-3-and-rbenv/
um deine Aufgabe auszuführen, benutze
Vielleicht ist es für jemanden nützlich
quelle