Erro de tecido: Erro fatal: Local () encontrou um erro (Código de retorno 2) ao executar 'Git Commit -M' Message '

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

  •  18-09-2019
  •  | 
  •  

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?

Foi útil?

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 localO 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 redirecionando sys.stdout e/ou sys.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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top