目标
我希望 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_app2
in 容器。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