2011-03-28 3 views
2

Django Celery에서 사용할 다른 데이터베이스를 설정할 수 있습니까?Django Celery 및 여러 데이터베이스 (Celery, Django 및 RabbitMQ)

구성에 여러 데이터베이스가있는 프로젝트가 있고 장고 셀러리가 기본 데이터베이스를 사용하는 것을 원하지 않습니다. 나는 아직도 장고 셀러리 관리 페이지를 사용하고이 다른 데이터베이스에 저장된 결과 : 네 당신이 할 수있는

답변

2

https://docs.djangoproject.com/en/1.4/topics/db/multi-db/#automatic-database-routing

0 :

은 장고 데이터베이스 라우터를 사용하여 장고 - 셀러리 모델을위한 별도의 데이터베이스를 설정할 수 있어야한다

django-celery와 함께 특별히 테스트하지는 않았지만 어떤 이유로 작동하지 않으면 django-celery (또는 Django 자체)의 버그가 수정되어야합니다.

라우터는 다음과 같이 보일 것입니다 :

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'] 
+0

이 APPS에 대해 확실합니까 = (... '장고'...) 생각, 나는 그것을 얻지 못합니까? : ( –

+0

나는 그것을 지금 얻는다, 고마워! 나는 지금 시험해 볼 것이다. –

4

을 읽을 수 있는지

나는 좋을 것입니다.

첫째 : 당신은 두 개의 데이터베이스를-설정하고 셀러리 작업에 명시 적으로 (예 : obj.save(using='second'))

을 두 번째를 지정하거나 셀러리에 사용되는 두 번째 settings.py을 만들 수 있습니다

./manage.py celeryd --settings_second 
+0

- 그때 내 셀러리를 생각 파일을 다른 설정을 사용하기로 결정한 경우 django admin 페이지는 올바른 데이터베이스를 찾지 못합니다. ( –

+0

작업이 정확히 동일 할 것이고 현재 사용중인 사이트에 따라 별도의 데이터베이스에서 실행해야합니다 (obj.save를 사용할 수 없습니다 (using = 'second') option)?이 SaaS 제품을 개발하려고합니다. t와 각 클라이언트는 동일한 기능을 갖지만 다른 하위 도메인을 사용합니다. – thelinuxer

관련 문제