面料误差:致命错误:local() 在执行 'git commit -m 'message' 时遇到错误(返回代码 2)

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

  •  18-09-2019
  •  | 
  •  

我正在尝试设置 fabfile 来部署我的 Django 应用程序。

我不明白为什么会出现此错误:

致命错误:local() 在执行 'git commit -m 'changed settings for prodserver' 时遇到错误(返回代码 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.

这里如果 Fabric 函数:

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

是否可以从 Fabric 进行 git 提交?

有帮助吗?

解决方案

我能诊断问题,当我加入捕获= False来声明:

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

这允许更冗长显示错误。

显然,织物的维护者将恢复local的行为返回到默认不捕获,在1.0

其他提示

这是一个与 python 相关的问题吗? 这个线程?

这样做的主要问题是 stdout/stderr 捕获是按运行/sudo 调用而不是按任务进行的。

如果您能向我解释如何收集,那就太好了 输出错误 只需修改名为的文件 fabfile_runner.py.
理想情况下,结构任务本身可以不被修改,这将允许向工厂上传您手动测试过的相同文件。

查看 Fabric 源代码并查看“tests”文件夹,特别是tests/utils.py。它包含一个装饰器, @mock_streams, ,它能够包装函数(任何 Python 代码中的任何函数——正如我提到的,它不是特定于 Fabric 的)并重定向 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