0

我喜欢用服务器数据库更新我的本地数据库。所以我用 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
4

1 回答 1

0

这是用于角色设置的完美之选

首先,您可能应该更好地拆分命令,然后创建一些角色定义。如果您想使用特定环境,那么最好使用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 上运行命令。您可以只运行 fabric 方法local,它将处理本地机器上的所有调用。local是 subprocess 模块的便捷包装器,因此后台没有发生 fabric/paramiko 魔术。如果您有兴趣查看代码,可以在这里找到

于 2013-09-24T06:58:49.487 回答