erreur Tissu: Erreur fatale: local () a rencontré une erreur (code de retour 2) lors de l'exécution message « git commit -m ''
Question
Je suis en train d'installer un fabfile pour déployer mon application Django.
Je ne peux pas comprendre pourquoi je reçois cette erreur:
Erreur fatale: local () a rencontré une erreur (code de retour 2) lors de l'exécution « git commit -m 'changé les paramètres pour 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.
Ici, si la fonction du tissu:
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'")
Est-il possible de faire un git commit de tissu?
La solution
J'ai pu diagnostiquer le problème quand j'ai ajouté la capture = False à la déclaration:
local('git rm fabfile.py', capture=False)
local('git add settings.py', capture=False)
Cela a permis à l'erreur à afficher en plus verbeux.
Apparemment, le mainteneur du tissu sera de revenir sur le comportement de retour local
de ne pas capturer par défaut, dans 1.0.
Autres conseils
Est-ce un problème lié python comme celui décrit dans ce fil ?
Le principal problème avec ceci est que la capture
stdout
/stderr
est par-run / invocation sudo et non par tâche.Il serait merveilleux si vous pouviez me expliquer comment je pourrais recueillir sortie et erreur que par la modification du fichier appelé
fabfile_runner.py
.
Idealement la tâche de tissu lui-même pourrait être non modifiée, cela permettrait de télécharger l'usine le même fichier que vous avez testé manuellement.Consultez la source de tissu et regardez dans le dossier « tests », teste spécifiquement / utils.py. Il contient un décorateur unique,
@mock_streams
, qui est capable d'enrouler une fonction (toute fonction dans un code de python - il est pas comme je l'ai spécifique, de tissus). Et redirigersys.stdout
et / ousys.stderr
pour la capture / ExamenIl est conçu pour une utilisation autour des fonctions, étant un décorateur, vous pouvez donc l'utiliser directement en modifiant votre
fabfile_runner.py
comme ceci:
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