通过fabric作为部署用户激活virtualenv

问题:

我想在本地运行我的架构脚本,这将反过来登录到我的服务器,切换用户部署,激活项目.virtualenv,这将更改项目的目录并发出git拉。

def git_pull():
    sudo('su deploy')
    # here i need to switch to the virtualenv
    run('git pull')

我通常使用来自virtualenvwrapper的workon命令,该文件来源于激活文件,postactivate文件会将我放在项目文件夹中。在这种情况下,似乎是因为fabric从shell运行,所以控制是传递给fabric,所以我不能使用bash的源代码内置到’$ source〜/ .virtualenv / myvenv / bin / activate’
有谁有这样做的例子和解释?

回答:

现在,你可以做我所做的,这是kludgy,但是工作得很好*(这个用法假设你使用virtualenvwrapper – 你应该是 – 但是你可以很容易地在你提到的更长的“源”调用中替换, 如果不):

def task():
    workon = 'workon myvenv && '
    run(workon + 'git pull')
    run(workon + 'do other stuff, etc')

自1.0版以来,Fabric有一个使用这种技术的prefix context manager,所以你可以例如:

def task():
    with prefix('workon myvenv'):
        run('git pull')
        run('do other stuff, etc')

*一旦使用command1 && command2方法可能会对您造成破坏,例如command1失败(command2永远不会运行)或command1未正确转义并包含特殊shell字符,等等。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Activate a virtualenv via fabric as deploy user

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

9 + 1 =