Django芹菜和多个数据库(芹菜、Django和RabbitMQ)

Django芹菜和多个数据库(芹菜、Django和RabbitMQ),django,rabbitmq,celery,django-celery,Django,Rabbitmq,Celery,Django Celery,是否可以设置不同的数据库用于Django芹菜 我有一个配置了多个数据库的项目,不希望Django芹菜使用默认数据库 如果我仍然可以使用django芹菜管理页面并读取存储在不同数据库中的结果,我会很高兴:)是的,你可以 第一:您可以设置两个数据库,并在中为芹菜任务明确指定第二个数据库(例如,obj.save(使用='second')) 或者创建第二个将用于芹菜的settings.py: ./manage.py celeryd --settings_second 应该可以使用django数据库路由

是否可以设置不同的数据库用于Django芹菜

我有一个配置了多个数据库的项目,不希望Django芹菜使用默认数据库

如果我仍然可以使用django芹菜管理页面并读取存储在不同数据库中的结果,我会很高兴:)

是的,你可以

第一:您可以设置两个数据库,并在中为芹菜任务明确指定第二个数据库(例如,
obj.save(使用='second')

或者创建第二个将用于芹菜的
settings.py

./manage.py celeryd --settings_second

应该可以使用django数据库路由器为django芹菜型号建立单独的数据库:

我还没有专门用django芹菜测试过这一点,但如果由于某种原因它不起作用,那么应该修复django芹菜(或django本身)中的一个bug

您的路由器将如下所示:

class CeleryRouter(object):
    "Route Celery models to separate DB."
    APPS = (
        'django',  # Models from kombu.transport.django, if you're using Django as a message transport.
        'djcelery',
    )
    DB_ALIAS = 'celery'

    def db_for_read(self, model, **hints):
        if model._meta.app_label in self.APPS:
            return self.DB_ALIAS
        return None

    def db_for_write(self, model, **hints):
        if model._meta.app_label in self.APPS:
            return self.DB_ALIAS
        return None

    def allow_relation(self, obj1, obj2, **hints):
        if (obj1._meta.app_label in self.APPS and
            obj2._meta.app_label in self.APPS):
            return True
        return None

    def allow_syncdb(self, db, model):
        if db == self.DB_ALIAS:
            # Only put models from APPS into Celery table (and south for
            # migrations).
            return model._meta.app_label in self.APPS + ('south',)
        elif model._meta.app_label in self.APPS:
            # Don't put Celery models anywhere else.
            return False
        return None
然后将其添加到您的设置中:

DATABASE_ROUTERS = ['path.to.CeleryRouter']

对于第二个选项-如果我决定使用其他设置文件,那么我认为我的芹菜django管理页面将无法找到正确的数据库:(任务是完全相同的,我只需要根据当前使用的站点在单独的数据库中运行(不能使用obj.save(使用class='second')选项)?我正在尝试开发此SaaS产品,每个客户端将具有相同的功能,但使用不同的子域。你确定此应用程序=(…'django'…)我不明白吗(