使用etcd管理Django设置
假设我有一个Django应用程序,我把环境变量的存储放到了etcd上。当我部署一个新服务器时,应用程序可以从etcd读取这些变量,然后把它们写入一个Python文件,这样在应用启动时可以根据需要加载。这部分是可以接受的。
但是,当配置发生变化时,我就不知道了。根据我所知,etcd并不会主动通知变化。我是不是需要设置一个后台程序,定期检查变化,然后在值改变时重新加载我的应用?我每次需要使用这些参数时都要去查询etcd吗?大家是怎么处理这个问题的呢?
2 个回答
0
我没有使用过CoreOS或Docker,但我读了很多相关内容,觉得这些东西非常酷。我想解决方案取决于你如何设置你的应用。如果你的应用有类似于很多应用服务器(比如uWSGI)那种“触碰重载”的支持,你可以在/etc/etcd/etcd.conf中设置key_file,并让你的应用服务器去监视它。不过,这样做感觉比应该的要复杂得多。我很确定,有经验的人能想出更好的办法。
1
你可以把ETCD当作设置的后端来使用,但为了让Django在运行时能够及时获取配置的变化(也就是说,不需要重启或重新加载),你需要设置一个后台机制来持续读取这些设置。
这个包 django-etcd-settings 是通过启动一个后台线程来实现的,这个线程会建立一个长连接,以便从ETCD中读取键值,并保持设置的最新状态。