我正在尝试设置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提交?
答案 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