Django 在任务内切换环境
我想用服务器数据库更新我的本地数据库。所以我用3个env创建了一个fabbile。在我的任务中,我首先去服务器,在那里做一些事情,然后我喜欢切换到本地,在那里做一些事情。如何更改任务内部的环境 对于其他东西,我是这样使用的:Django 在任务内切换环境,django,fabric,Django,Fabric,我想用服务器数据库更新我的本地数据库。所以我用3个env创建了一个fabbile。在我的任务中,我首先去服务器,在那里做一些事情,然后我喜欢切换到本地,在那里做一些事情。如何更改任务内部的环境 对于其他东西,我是这样使用的:fab www task,但我只有www env 这是我的fabfile.py: def www(): env.hosts = ['s7.wservices.ch'] env.user = 'beautyparlour' env.dbname =
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
这是用于和的最完美的东西 首先,您可能应该更好地拆分命令,然后创建一些角色定义。如果您想使用特定的环境,那么最好使用
设置
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
是子流程模块的一个方便的包装器,因此后台没有fabric/paramiko魔法。如果您有兴趣查看,可以找到代码谢谢,这对我来说很好,但是如果我这样做,我如何设置例如env.user
,env.dbname
,env.name\u文件夹
。。。对于每种环境?与您以前使用的方法相同?您还可以创建一个新函数load_env
,该函数扫描您正在使用的角色,然后适当地加载user、dbname和name_文件夹。实际上,最好使用设置
上下文管理器。我更新了答案以反映这一点我明白了,这当然是一种方式。我的想法是最终有两个文件。文件1:定义环境(如设置文件)。文件2:任务和功能。因此,我可以为每个项目使用相同的两个文件,只需更新file1。我仍然不确定什么是最好的解决方案。因此,原始方法的问题是,您始终需要在函数调用开始时声明任务需要具有哪些设置,否则其他任务的设置将渗透到新任务中,可能会产生错误。上下文管理器最酷的地方是,您可以拥有默认设置,但在需要时会覆盖它们,当您不在管理器中时,您的设置将恢复为默认设置