在任务中切换env

时间:2013-09-23 14:29:34

标签: django fabric

我想用服务器db更新我的本地数据库。所以我用3 env创建了一个fabfile。在我的任务中,首先我去服务器,做那里的东西 - 然后我喜欢切换,例如到当地,做那里的东西。如何更改任务中的环境?

对于我使用它的其他东西:fab www task然后我只有www env。

这是我的fabfile.py:

def www():
    env.hosts  = ['s7.wservices.ch']
    env.user   = 'beautyparlour'
    env.dbname = 'db1'
    env.dbuser = 'user1'
    env.dbpass = 'password'

    env.name_vitualenv = 'django15' #name of the virtualenv
    env.name_folder   = 'projektfoldername' # name of the project folder


def dev():
    env.hosts  = ['s7.wservices.ch']
    env.user   = 'beautyparlour'
    env.dbname = 'db1'
    env.dbuser = 'user1'
    env.dbpass = 'password'

    env.name_vitualenv = 'django15' #name of the virtualenv
    env.name_folder   = 'projektfoldername' # name of the project folder



def home():
    env.hosts = ['localhost']
    env.user = ''
    env.dbname = 'dbx'
    env.dbuser = 'Roland'
    env.dbpass = ''

    env.name_vitualenv = 'django15' #name of the virtualenv
    env.name_folder   = 'projektfoldername' # name of the project folder



def update_db():
    '''
    use this on your local maschine to get the db from the live system
    fab update_db

    1. create a backup on server
    2. download the backup
    3. unzip the packup media and sql
    4. load the sql dump to database

    '''

    # switch env to server ??
    www()

    ...do stuff on server

    # switch env to local ??
    home()

    ... do stuff local

1 个答案:

答案 0 :(得分:0)

这是rolessettings

使用的完美选择

首先,你应该更好地分割你的命令,然后创建一些角色定义。如果您想使用特定环境,那么最好使用settings

from fabric.api import roles, settings, task

env.roledefs = {
    "www": ["some_remote_server"],
    "other": ["wherever"],
}

@roles("www")
@task
def do_stuff_on_www():
    with settings(user="myname", some_prop="bar"):
        # Do some stuff on the www server

鉴于您正在使用上下文管理器,您的环境将重置为函数完成后最初输入的默认值。

顺便说一下,您不必指定任何新的主机定义来在localhost上运行命令。您可以运行结构方法local,它将处理本地方框上的所有呼叫。 local是子进程模块的便利包装器,因此在后台没有fabric / paramiko魔术。如果您有兴趣查看

,可以找到代码here
相关问题