Erro de tecido: Erro fatal: Local () encontrou um erro (Código de retorno 2) ao executar 'Git Commit -M' Message '
Pergunta
Estou tentando configurar um Fabfile para implantar meu aplicativo Django.
Não consigo descobrir por que estou recebendo este erro:
Erro fatal: Local () encontrou um erro (Código de retorno 2) ao executar 'Git Commit -M' Alterações Alteradas para 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.
Aqui se a função de tecido:
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'")
É possível fazer um comprometimento git do tecido?
Solução
Consegui diagnosticar o problema quando adicionei Capture = False à Declaração:
local('git rm fabfile.py', capture=False)
local('git add settings.py', capture=False)
Isso permitiu que o erro fosse exibido mais verbosamente.
Aparentemente, o mantenedor do tecido será revertido local
O comportamento de volta a não capturar por padrão, em 1.0.
Outras dicas
Esta é uma questão relacionada ao Python, como a descrita em este tópico?
O principal problema com isso é que o
stdout
/stderr
A captura é a invocação por corrida/sudo e não por tarefa.Seria maravilhoso se você pudesse me explicar como eu poderia coletar resultadoe erro apenas modificando o arquivo chamado
fabfile_runner.py
.
Idely, a tarefa de tecido em si poderia não ser modificada, isso permitiria fazer upload da fábrica o mesmo arquivo que você testou manualmente.Confira a fonte de tecido e procure na pasta 'Testes', especificamente testes/utils.py. Ele contém um único decorador,
@mock_streams
, que é capaz de envolver uma função (qualquer função em qualquer código Python - não é específico do tecido, como mencionei) e redirecionandosys.stdout
e/ousys.stderr
para captura/exame.Ele foi projetado para uso em torno das funções, sendo um decorador, para que você possa usá -lo diretamente modificando seu
fabfile_runner.py
igual a:
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