Получение ошибки 404 в Heroku с Джанго-Арендаторами с подстановочными знаками CNAME - PullRequest
0 голосов
/ 03 сентября 2018

У меня действительно странная ситуация, которую я не могу понять. Я не касался своей реализации этого пакета с начала года, и теперь эта функциональность перестает существовать на моем живом сервере heroku. В настоящее время у меня есть форма «Создать учетную запись» в моем общедоступном арендаторе, которая генерирует арендатора / домен точно так же, как это делают документы, а django-tenants выполняет автоматическую генерацию схемы. Это работает правильно на моем локальном хосте и не имеет проблем. Однако на моем живом сервере я получаю сообщение об ошибке 404 ... Not Found...The requested URL / was not found on this server.

1006 *

У меня есть запись CNAME на DNSimple, которая указывает на домен с подстановочными символами, который, кажется, работает, потому что у меня уже есть арендатор, который я недавно создал, который все еще полностью функционален (т. Е. some-customer.mydomain.com). Я посмотрел на свою базу данных PSQL, прикрепленную к heroku, и все там, как должно быть, а также миграции, происходящие в журналах, когда я создаю учетную запись, которая генерирует арендатора.

1012 *

Я надеялся, что может быть какое-то понимание того, что я делаю / сделал неправильно, чтобы эта проблема возникла. Просто кажется странным, что ни один из моих теперь сгенерированных арендаторов не может быть доступен через их 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)
...

настройки производства Heroku (включены относительные вещи)

...
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'),
]

1 Ответ

0 голосов
/ 05 сентября 2018

Кажется, все выглядит хорошо. Если вы попытаетесь сгенерировать арендатора с помощью django-tenant docs в оболочке на вашем производственном сервере, выполнив команду heroku run python manage.py shell -a yourapp, и это сработает, значит, что-то не так с вашим кодом, который генерирует арендаторов, которых у вас нет вывешенным.

...