是否有可能设置一个不同的数据库与Django芹菜一起使用?Django芹菜和多个数据库(芹菜,Django和RabbitMQ)
我有一个在配置中有多个数据库的项目,并且不希望Django Celery使用默认的项目。
我会很好,如果我仍然可以使用Django芹菜的管理页面,并读取存储在这个不同的数据库结果:)
是否有可能设置一个不同的数据库与Django芹菜一起使用?Django芹菜和多个数据库(芹菜,Django和RabbitMQ)
我有一个在配置中有多个数据库的项目,并且不希望Django Celery使用默认的项目。
我会很好,如果我仍然可以使用Django芹菜的管理页面,并读取存储在这个不同的数据库结果:)
应该可以设置为Django的芹菜车型单独的数据库使用Django数据库路由器:
https://docs.djangoproject.com/en/1.4/topics/db/multi-db/#automatic-database-routing
我还没有专门用django-celery测试过,但如果因为某种原因无法正常工作,那么这是django-celery(或者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']
当然可以。
第一:你可以建立两个数据库,并明确指定第二个用于芹菜任务(例如obj.save(using='second')
)
或创建第二settings.py
将被用于芹菜:
./manage.py celeryd --settings_second
对于第二个选项 - 如果我决定采用其他设置文件,然后我觉得我的芹菜Django的管理页面不会看它是正确的数据库:( – 2011-03-28 14:58:14
什么是完全相同的任务,我只需要然后运行在不同的数据库,取决于当前使用的网站(不能使用obj.save(使用='秒')选项)?我正在尝试开发此SaaS产品吨和每个客户端将具有相同的功能,但使用不同的子域。 – thelinuxer 2012-02-29 15:18:40
你确定这个APPS =(...'django'...)想,我不明白吗? :( – 2012-06-21 08:13:06
我现在明白了,谢谢,我现在就试试 – 2012-06-21 08:22:24