Tela de error: Error grave: local () ha encontrado un error (código de retorno 2) durante la ejecución de 'git commit -m 'mensaje'
Pregunta
Estoy intentando configurar un fabfile para desplegar mi aplicación Django.
No puedo entender por qué estoy recibiendo este error:
Fatal error: local () encontrado un error (código de retorno 2) durante la ejecución de 'git commit -m 'cambiado la configuración de 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.
A continuación, si la función de la tela:
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'")
¿Es posible hacer un git commit de Tela?
Solución
Yo era capaz de diagnosticar el problema cuando he añadido captura = False a la declaración:
local('git rm fabfile.py', capture=False)
local('git add settings.py', capture=False)
Esto permitió que el error que se mostrará más detallados.
Al parecer, el mantenedor de la tela será revertir el comportamiento de local
no volver a capturar de forma predeterminada, en 1,0.
Otros consejos
¿Es esta una cuestión relacionada pitón similar a la descrita en el este hilo ?
El principal problema con esto es que la captura
stdout
/stderr
es per-run / sudo invocación y no por tareas.Sería maravilloso si pudiera explicar cómo podría recoger salida y error sólo modificando el archivo llamado
fabfile_runner.py
.
Idealmente la tarea de tela en sí podría estar sin modificar, esto permitiría cargar la fábrica del mismo archivo que ha probado de forma manual.Salida de la fuente de la tela y buscar en la carpeta 'pruebas', específicamente las pruebas / utils.py. Contiene un único decorador,
@mock_streams
, que es capaz de envolver una función (ninguna función en cualquier código Python - no es específica de la tela, como he mencionado).sys.stdout
y redirigir y / osys.stderr
para la captura / examenEstá diseñado para su uso alrededor funciones, siendo un decorador, por lo que podría utilizarlo directamente mediante la modificación de su
fabfile_runner.py
este modo:
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