2

目标

我希望 Doccano 将保存在我的主应用程序 (app2) 中的用户用作自己的用户,而不是 Doccano 使用自己的用户。这些都是 Django 数据库,所以我认为这些不是 Doccano 特定的问题

问题

用户之间的连接工作,我可以用 app2 用户登录到 Doccano。当 /projects 页面500 internal server error出现在网站上时,终端 app2 会打印:ERROR: relation "api_project" does not exist at character 363

当创建一个新项目403 Forbidden时,会出现一个 POST 到/v1/projects

我做了什么

我目前正在它们的容器中运行 Doccano 后端、nginx 和 postgres,并同时运行 app2 和postgres_app2in 容器。Doccano 后端与 Doccano postgres 共享一个(docker-compose)网络,另一个网络与postgres_app2. doccano/app/app/settings.py有两个数据库和一个到路由器的链接:

# settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': path.join(BASE_DIR, 'db.sqlite3'),
    },
    "app2_db": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": "postgres",
        "USER": os.getenv("POSTGRES_USER", "user_app2"),
        "PASSWORD": os.getenv("POSTGRES_PASSWORD", "pass_app2"),
        "HOST": "postgres",
        "PORT": 5432,
    }
}

DATABASE_ROUTERS = ['app.authRouter.AuthRouter']

AuthRouter.py看起来像这样:

# AuthRouter.py

class AuthRouter(object):
    def db_for_read(self, model, **hints):
        if model._meta.app_label == 'auth' or model._meta.app_label == 'authtoken':
            return 'app2_db'
        return None

    def db_for_write(self, model, **hints):
        if model._meta.app_label == 'auth' or model._meta.app_label == 'authtoken':
            return 'app2_db'
        return None

    def allow_relation(self, obj1, obj2, **hints):
        if obj1._meta.app_label == 'auth' or obj1._meta.app_label == 'authtoken' or \
           obj2._meta.app_label == 'auth' or obj2._meta.app_label == 'authtoken':
           return True
        return None

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        if app_label == 'auth' or app_label == 'authtoken':
            return db == 'app2_db'
        return None
4

0 回答 0