직물 오류 : 치명적인 오류 : Local ()은 'git commit -m'메시지를 실행하는 동안 오류 (반환 코드 2)를 만났습니다.
문제
Django 앱을 배포하기 위해 FabFile을 설정하려고합니다.
왜이 오류가 발생했는지 알 수 없습니다.
치명적인 오류 : Local ()가 'git commit -m'을 실행하는 동안 오류 (반환 코드 2)가 발생했습니다.
$ 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'")
직물에서 git 커밋을 만들 수 있습니까?
해결책
선언에 capture = false를 추가했을 때 문제를 진단 할 수있었습니다.
local('git rm fabfile.py', capture=False)
local('git add settings.py', capture=False)
이를 통해 오류가 더욱 구두로 표시 될 수있었습니다.
분명히, 직물의 관리자는 되돌릴 것입니다 local
1.0에서 기본적으로 캡처하지 않는 행동.
다른 팁
이것은 다음과 같은 파이썬 관련 문제입니까? 이 스레드?
이것의 주요 문제는
stdout
/stderr
캡처는 실행당/Sudo 호출이며 작업당이 아닙니다.내가 어떻게 수집 할 수 있는지 설명 할 수 있다면 좋을 것입니다. 산출그리고 오류 호출 된 파일 만 수정하여
fabfile_runner.py
.
알아 보면 패브릭 작업 자체는 수정되지 않은 상태로 만들 수 있으므로 수동으로 테스트 한 것과 동일한 파일을 공장에 업로드 할 수 있습니다.패브릭 소스를 확인하고 '테스트'폴더, 특히 테스트/utils.py를 살펴보십시오. 단일 데코레이터가 포함되어 있습니다.
@mock_streams
, 함수 (Python 코드의 모든 기능 - 내가 언급했듯이 직물에 따라 다르지 않음) 및 리디렉션을 포장 할 수 있습니다.sys.stdout
및/또는sys.stderr
캡처/시험.기능 주위에 사용하도록 설계되었고, 데코레이터가되므로, 당신은 당신이 당신의
fabfile_runner.py
그렇게 :
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