如何让django-q与django-tenants协同工作?遇表不存在错误
解决django-q与django-tenants协同工作的表不存在问题
问题根源
你把django-q放在了TENANT_APPS中,这会导致django-q的表被创建在各个租户的独立schema下,而django-q默认尝试访问public schema的表,因此出现"relation 'django_q_schedule' does not exist"错误。
修复步骤
调整django-q的应用归属
把django-q从TENANT_APPS移到SHARED_APPS,这样它的表会被创建在public共享schema中:SHARED_APPS = ( 'django_tenants', # mandatory 'companies', # 租户模型所在应用 'accounts.apps.AccountsConfig', 'django.contrib.humanize', 'django_q', # 移到这里 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ) TENANT_APPS = ( # 移除'django_q' 'loads', 'dispatchers', 'accounts.apps.AccountsConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ) INSTALLED_APPS = list(SHARED_APPS) + [app for app in TENANT_APPS if app not in SHARED_APPS]重新执行共享应用迁移
运行命令在public schema创建django-q的表:python manage.py migrate_schemas --shared解决django-tenants-q的mscluster命令问题
- 首先确认
django_tenants_q已加入SHARED_APPS:SHARED_APPS = ( # ...其他应用 'django_tenants_q', ) - 如果命令仍无法运行,手动配置django-q集群指向public schema:
在settings.py中添加或修改Q_CLUSTER配置:Q_CLUSTER = { 'name': 'DjangoORM', 'workers': 4, 'timeout': 90, 'retry': 120, 'queue_limit': 50, 'bulk': 10, 'orm': 'default', 'schema': 'public' # 指定使用public schema } - 直接启动集群时指定schema:
python manage.py qcluster --schema public
- 首先确认
内容的提问来源于stack exchange,提问作者Valeriu
相关产品推荐
相关产品推荐

