不同数据库上的 Django 应用程序模型
Posted
技术标签:
【中文标题】不同数据库上的 Django 应用程序模型【英文标题】:Django application models on different databases 【发布时间】:2015-02-26 16:21:15 【问题描述】:我有两个 django 应用程序,在服务器 A
上调用它们 Main
和在服务器 B
上调用它们 Tasker
。
Main
响应用户请求,做了很多可以快速完成的事情。
另一方面,Tasker
只有少数几个用于日志记录和 celery 任务的模型。
在服务器 A
上,'tasker' 不包含在 INSTALLED_APPS
中,因为我不需要它,而在服务器 B
上,它是。
从django's documentation,我创建了一个路由器并定义了db_for_read
和db_for_write
class ModelsRouter(object):
"""
Logging models are on local,
but updated models are on another server
"""
def db_for_read(self, model, **hints):
if model._meta.app_label == 'tasker':
return 'tasker'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label == 'tasker':
return 'tasker'
return None
在服务器 B 上,DATABASES
设置包含两个键:
default
指向服务器 A
tasker
指向本地主机
我遇到的问题是,当我运行manage.py migrate
时,tasker
的模型是在服务器 A 上创建的。
如何在服务器 B 上设置项目以了解以下内容:
- main
app 的模型在服务器 A 上
- tasker
的模型在服务器 B(也是本地主机)上?
【问题讨论】:
【参考方案1】:我设法通过以下方式解决了这个问题:
如果模型不是来自应用程序tasker
,我将 ModelsRouter 修改为使用 main
数据库配置
在我部署tasker
的服务器上,我修改了DATABASES
,使default
指向localhost
,main
指向main
所在的另一台服务器
在服务器 B 上,我运行了 manage.py migrate tasker
,因为该数据库中不需要其他模型。
它现在正在工作:
我在运行manage.py migrate tasker
时遇到的问题是这样的:
RuntimeError: Error creating new content types. Please make sure contenttypes is migrated before trying to migrate apps individually.
但我会管理它。
【讨论】:
以上是关于不同数据库上的 Django 应用程序模型的主要内容,如果未能解决你的问题,请参考以下文章