在 Heroku 中使用具有通配符 CNAME 的 Django 租户接收 404 错误



我有一个非常奇怪的情况,我似乎无法弄清楚。自今年年初以来,我一直没有接触过这个软件包的实现,现在该功能在我的实时 heroku 服务器上不复存在。我目前在我的公共租户上有一个创建帐户表单,它生成一个租户/域,就像文档和 django 租户一样生成其自动模式。这在我的本地主机上正常工作并且没有问题。但是在我的实时服务器上,我继续收到 404 错误......Not Found...The requested URL / was not found on this server.

我在 DNSimple 上有一条CNAME记录,该记录指向一个似乎正在运行的通配符域,因为我已经有一个我不久前创建的租户,它仍然完全正常运行(即。some-customer.mydomain.com(。我已经查看了附加到 heroku 的 PSQL 数据库,一切都在那里,以及当我创建一个生成租户的帐户时日志中发生的迁移。

我希望对我正在做什么/做错什么来使这个问题发生有一些启发。这似乎很奇怪,我现在生成的租户都无法通过他们的Domain访问。

编辑:发布代码。

本地 .env 文件

SECRET_KEY=...
DEBUG=True
DB_NAME=...
DB_USER=...
DB_PASSWORD=...
DB_HOST=localhost
ALLOWED_HOSTS=.localhost, .herokuapp.com
GOOGLE_RECAPTCHA_SECRET_KEY=...
AWS_ACCESS_KEY_ID=...
AWS_SECRET_ACCESS_KEY=...
AWS_STORAGE_BUCKET_NAME=...
SECURE_SSL_REDIRECT='False'

settings.py(包括我认为是相对的东西(

...
LOGIN_URL = 'login'
ALLOWED_HOSTS = config('ALLOWED_HOSTS', default=[], cast=Csv())
DEBUG = config('DEBUG', default=False, cast=bool)
SECRET_KEY = config('SECRET_KEY')
SHARED_APPS = (
'django_tenants',
'tenant',
'django.contrib.contenttypes',
'public.apps.PublicConfig',
'django.contrib.staticfiles',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.sessions',
'debug_toolbar',
'storages'
)
TENANT_APPS = (
'django.contrib.contenttypes',
'inventory.apps.InventoryConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.sessions',
'django.contrib.messages',
)
INSTALLED_APPS = list(SHARED_APPS) + [app for app in TENANT_APPS if app not in SHARED_APPS]
TENANT_MODEL = 'tenant.Client'
TENANT_DOMAIN_MODEL = 'tenant.Domain'
MIDDLEWARE = [
'django_tenants.middleware.main.TenantMainMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
]
ROOT_URLCONF = 'myapp.urls'
WSGI_APPLICATION = 'myapp.wsgi.application'
DATABASE_ROUTERS = (
'django_tenants.routers.TenantSyncRouter',
)
PUBLIC_SCHEMA_URLCONF = 'myapp.urls_public'
SECURE_SSL_REDIRECT = config('SECURE_SSL_REDIRECT', default=False, cast=bool)
...

生产英雄设置(包括相关内容(

...
ALLOWED_HOSTS: .herokuapp.com, .mydomain.com, mydomain.com
DEBUG: False
SECURE_SSL_REDIRECT: True
...

urls.py(每个租户都应看到这些(

urlpatterns = [
...
url(r'^$', dashboard, name='dashboard'),
url(r'^login/$', login_view, name='login'),
url(r'^logout/$', logout_view, name='logout'),
...
]

urls_public.py(主站点(

urlpatterns = [
url(r'^$', home_view, name='home'),
url(r'^login/$', login_view, name='login'),
url(r'^logout/$', logout_view, name='logout'),
url(r'^create_account/$', create_account_view, name='create_account'),
]

一切似乎都很好。如果您尝试在生产服务器上使用 shell 中的 django-tenant 文档生成租户,并且执行heroku run python manage.py shell -a yourapp并且有效,那么您生成尚未发布的租户的代码存在问题。

相关内容

最新更新