직물 오류 : 치명적인 오류 : Local ()은 'git commit -m'메시지를 실행하는 동안 오류 (반환 코드 2)를 만났습니다.

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

  •  18-09-2019
  •  | 
  •  

문제

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)

이를 통해 오류가 더욱 구두로 표시 될 수있었습니다.

분명히, 직물의 관리자는 되돌릴 것입니다 local1.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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top