结构错误:致命错误:local()在执行'git commit -m'消息时遇到错误(返回代码2)

时间:2009-12-09 17:01:17

标签: python git fabric

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

我无法弄清楚为什么我会收到此错误:

  

致命错误:local()在执行'git commit -m'更改了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提交?

2 个答案:

答案 0 :(得分:7)

当我在声明中添加了capture = False时,我能够诊断出问题:

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

这样可以更加详细地显示错误。

显然,Fabric的维护者将在1.0中将local的行为恢复为默认捕获状态。

答案 1 :(得分:1)

这是一个与python相关的问题,如this thread中描述的问题吗?

  

这个问题的主要问题是stdout / stderr捕获是每次运行/ sudo调用而不是每个任务。

     

如果你能解释我如何通过修改名为 fabfile_runner.py 输出错误,那将是非常好的>。
  理想情况下,结构任务本身可以不加修改,这样就可以将工厂上传到您手动测试的文件。

     

查看Fabric源并查看'tests'文件夹,特别是tests / utils.py。它包含一个装饰器@mock_streams,它能够包装一个函数(任何Python代码中的任何函数 - 它不像我提到的特定于Fabric)并重定向sys.stdout和/或{{1捕获/检查。

     

它专为在函数周围使用而设计,作为装饰器,因此您可以通过修改sys.stderr直接使用它,如下所示:

fabfile_runner.py

fabfile_runner.py