是否有可能設置一個不同的數據庫與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