在不重启服务器的情况下使django的设置缓存无效?

时间:2012-05-30 17:17:34

标签: database django caching multiple-databases uwsgi

我正在使用涉及多个数据库的django应用程序 - 动态添加多个数据库,即。每当新客户注册时,我们都会给他们一个新的数据库。设置文件可以动态加载(例如,我在服务器上运行shell脚本并更新数据库定义而不更改任何代码 - 如果你真的好奇如何,请给我发消息),但是因为uwsgi / django会缓存设置,我必须碰撞uwsgi只是为了让新数据库得到认可。

有关强制django重新加载设置或使其设置缓存无效的任何建议吗?它可以来自命令行等。目前我正在使用它 import settings 而不是来自django.conf import settings,因为过去已经半工作,但我可以轻松转回。

谢谢!

ps - 如果答案是,“你是假的,不要使用动态多个数据库”,这也没关系;)

1 个答案:

答案 0 :(得分:1)

首先。如果你可以从多个数据库DO辞职,只有修复了数据库列表,Django才能很好地支持这个。如果您可以为每个客户端提供单独的数据库,则可能为不同的客户端提供单独的wsgi进程(以及单独的DATABASES设置)。然后你只需为新客户端生成新的wsgi进程,而不必修改设置。

如果您仍想做您计划的事,请参阅以下提示:

动态重新加载设置不是一种选择。那里有很多问题。即使你打败了所有人,他们也可能会在你没想到的那一刻回来,你会花几个小时(如果不是几天)进行调试。

如果您的数据库设置是一致的(即所有客户端的密码和用户相同),您可以考虑对DATABASES变量使用defaultdict。默认dict有工厂选项。你可以在工厂里拥有这样的东西:

def database_configuration_factory(name):
    # check if database exists (ie. raw SQL)

    return {
        'NAME': name,
        ...
    }
相关问题