2

Django Celery で使用する別のデータベースを設定することは可能ですか?

複数のデータベースを構成するプロジェクトがあり、Django Celery でデフォルトのデータベースを使用したくありません。

djangoセロリの管理ページを引き続き使用して、この別のデータベースに保存されている結果を読み取ることができればいいと思います:)

4

2 に答える 2

4

はい、できます。

1つ目:2つのデータベースを設定し、セロリタスク用に2つ目のデータベースを明示的に指定できます(例obj.save(using='second')

またはsettings.py、セロリに使用される秒を作成します。

./manage.py celeryd --settings_second
于 2011-03-28T14:29:59.683 に答える
2

Django データベース ルーターを使用して、django-celery モデル用に別のデータベースをセットアップできるはずです。

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

これは特に 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']
于 2012-05-27T19:15:34.973 に答える