我想用服务器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
答案 0 :(得分: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上运行命令。您可以运行结构方法local
,它将处理本地方框上的所有呼叫。 local
是子进程模块的便利包装器,因此在后台没有fabric / paramiko魔术。如果您有兴趣查看