我正在将我的django项目从单个数据库移动到使用2个不同的mysql数据库(主从配置),其中我的所有读取都转到从属,然后写入主服务器。
我在settings.py中有以下配置
DATABASES = {
'default': {},
'master': {
'ENGINE': 'django.db.backends.mysql',
'NAME': config('django.db.dbName'),
'USER': config('django.db.dbUser'),
'PASSWORD': config('django.db.dbPass'),
'HOST': config('django.db.dbhost_master'),
},
'slave': {
'ENGINE': 'django.db.backends.mysql',
'NAME': config('django.db.dbUser'),
'USER': config('credential_id'),
'PASSWORD': config('dbPass'),
'HOST': config('django.db.dbhost_slave'),
},
}
DATABASE_ROUTERS = ["db_router.DBRouter"]
这就是我的DBRouter的样子:
class DBRouter(object):
def db_for_read(self, model, **hints):
"""
Reads always go to the slave.
"""
return 'slave'
def db_for_write(self, model, **hints):
"""
Writes always go to the master.
"""
return 'master'
def allow_relation(self, obj1, obj2, **hints):
"""
Relations between objects are allowed if both objects are
in the master/replica nodes.
"""
db_list = ('master', 'slave')
if obj1._state.db in db_list and obj2._state.db in db_list:
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
"""
All non-auth models end up in this pool.
"""
return True
我遇到了一些运行迁移的问题,但是当我使用每个命令显式提供 - database = master 时,一切正常:
EG。 venv / bin / python app / manage.py migrate --database = master --no-input;
但我无法使用此配置启动celerybeat。
python manage.py celerybeat --settings="com_executor.settings" --logfile=~/celery_beat.log
给出错误: 配置不正确:settings.DATABASES配置不正确。请提供ENGINE值。检查设置文档以获取更多详细信息。
这是同样的错误,我在迁移时得到但是一旦我添加了--database = master就消失了。
但是对于celerybeat来说同样不起作用:
python manage.py celerybeat --database=master --settings="com_executor.settings" --logfile=~/celery_beat.log
给出以下错误
manage.py celerybeat: error: unrecognized arguments: --database=master
有没有人找到任何方法来处理这种情况,或者为数据库添加“默认”配置是让它运行的唯一方法? (我想尽可能避免,以确保我没有向错误的数据库实例发送意外命令)