Fabric Fehler: Fatal error: local () ist ein Fehler aufgetreten (Return-Code 2), während der Ausführung ‚git commit -m 'message'

StackOverflow https://stackoverflow.com/questions/1875306

  •  18-09-2019
  •  | 
  •  

Frage

Ich versuche, eine fabfile Setup meiner Django App bereitstellen.

Ich kann nicht erklären, warum ich diesen Fehler bin immer:

  

Fatal error: local () ist ein Fehler aufgetreten (Returncode 2) während der Ausführung von ‚git commit -m 'geänderten Einstellungen für prodserver'

$ fab create_branch_deploy_to_prodserver
[localhost] run: git checkout prodserver_server
[localhost] run: git merge master
[localhost] run: cp settings_prodserver.py settings.py
[localhost] run: git add settings.py
[localhost] run: git commit -m 'changed settings for prodserver'

Fatal error: local() encountered an error (return code 1) while executing 'git commit -m 'changed settings for prodserver''

Aborting.

Hier, wenn der Stoff-Funktion:

def create_branch_deploy_to_prodserver():  
    local("git checkout prodserver_server")  
    local("git merge master")  
    local('cp settings_prodserver.py settings.py') # 
    #local('git rm fabfile.py') #This is also creating error so it's commented out
    local('git add settings.py')  
    local("git commit -m 'changed settings for prodserver'")  

Ist es möglich, ein git commit von Stoff zu machen?

War es hilfreich?

Lösung

Ich war in der Lage, das Problem zu diagnostizieren, wenn ich capture = False auf die Erklärung hinzugefügt:

local('git rm fabfile.py', capture=False)
local('git add settings.py', capture=False)

Dies erlaubt der Fehler werden mehr verbosely angezeigt.

Anscheinend wird der Betreuer von Fabric local das Verhalten wieder zurück zu standardmäßig nicht erfassen, in 1.0.

Andere Tipps

Ist das ein Python-verwandtes Thema wie die beschrieben in dieses Thema ?

  

Das Hauptproblem dabei ist, dass die stdout / stderr Capturing ist pro-run / sudo Aufruf und nicht pro-Aufgabe.

     

Es wäre schön, wenn Sie mir erklären, wie ich sammeln konnte Ausgang und Fehler , indem nur die Datei ändern genannt fabfile_runner.py .
  Idealy den Stoff Aufgabe selbst unmodifiziert sein könnte, würde dies erlauben, die die Fabrik die gleiche Datei zu laden, die Sie manuell getestet haben.

     

Überprüfen Sie den Stoff Quelle aus und schauen Sie in den Ordner ‚Tests‘, speziell Tests / utils.py. Es enthält eine einzelne Dekorateur, @mock_streams, die aus Einwickeln eine Funktion in der Lage ist (jede Funktion in jedem Python-Code - es ist nicht Stoff spezifisch, wie ich bereits erwähnt). Und Umleitung sys.stdout und / oder sys.stderr für die Erfassung / Prüfung

     

Es ist für den Einsatz rund um Funktionen ausgelegt ist, ein Dekorateur zu sein, so könnte man es direkt verwenden, indem Sie Ihre fabfile_runner.py wie so ändern:

fabfile_runner.py

from StringIO import StringIO
import sys
from test_fabfile import hello_world

def execute(task):
    output = StringIO()
    error = StringIO()
    sys.stdout = output
    sys.stderr = error
    task()
    sys.stdout = sys.__stdout__
    sys.stderr = sys.__stderr__
    return (output.getvalue(), error.getvalue())

output, error = execute(hello_world)
print "output : %s" %output
print "error : %s" %error
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top