2009-12-09 8 views
6

Django uygulamamı dağıtmak için bir fab dosyası kurmaya çalışıyorum. Kumaş fonksiyonu varsa buradaYapı hatası: Önemli hata: Yerel() 'git commit -m' iletisi çalıştırılırken bir hatayla karşılaşıldı (kod 2) '

Fatal error: local() encountered an error (return code 2) while executing 'git commit -m 'changed settings for 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. 

:

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'") 

o bir git dan taahhüt yapmak mümkün mü

Ben bu hatayı alıyorum nedenini anlamaya olamaz Kumaş?

cevap

6

Ben ilanına = False yakalama eklendiğinde Sorunu teşhis edebildi:

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

Bu hata görüntülenmesine izin verilir daha ayrıntılı olarak.

Görünüşe göre, Fabric'in sürdürücüsü, local'un davranışını varsayılan olarak 1.0'da geri almamaya döndürecektir.

1

Bu python ile ilgili bir sorun, this thread'da açıklanan gibi mi?

The main problem with this is that the stdout/stderr capturing is per-run/sudo invocation and not per-task.

It would be wonderful if you could explain me how I could collect outputand error by only modifying the file called fabfile_runner.py.
Idealy the fabric task itself could be unmodified, this would allow to upload the the factory the same file that you have tested manually.

Check out the Fabric source and look in the 'tests' folder, specifically tests/utils.py. It contains a single decorator, @mock_streams , which is capable of wrapping a function (any function in any Python code -- it's not Fabric specific, as I mentioned) and redirecting sys.stdout and/or sys.stderr for capture/examination.

It's designed for use around functions, being a decorator, so you could use it directly by modifying your fabfile_runner.py like so:

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