デプロイユーザーとしてファブリック経由で仮想環境をアクティブ化する 質問する

デプロイユーザーとしてファブリック経由で仮想環境をアクティブ化する 質問する

ファブリック スクリプトをローカルで実行し、サーバーにログインして、ユーザーを切り替えてデプロイし、プロジェクトの .virtualenv をアクティブ化します。これにより、dir がプロジェクトに変更され、git pull が発行されます。

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

私は通常、virtualenvwrapper の workon コマンドを使用して、activate ファイルをソースし、postactivate ファイルでプロジェクト フォルダーに移動します。この場合、fabric はシェル内から実行されるため、制御が fabric に渡され、bash の組み込みソースを '$source ~/.virtualenv/myvenv/bin/activate' に使用することはできません。

これをどのように実行したかの例と説明を持っている人はいますか?

ベストアンサー1

bitprophetの予測の最新情報として:Fabric 1.0では、プレフィックス()独自のコンテキスト マネージャーも作成できます。

from __future__ import with_statement
from fabric.api import *
from contextlib import contextmanager as _contextmanager

env.hosts = ['servername']
env.user = 'deploy'
env.keyfile = ['$HOME/.ssh/deploy_rsa']
env.directory = '/path/to/virtualenvs/project'
env.activate = 'source /path/to/virtualenvs/project/bin/activate'

@_contextmanager
def virtualenv():
    with cd(env.directory):
        with prefix(env.activate):
            yield

def deploy():
    with virtualenv():
        run('pip freeze')

おすすめ記事