Сессия Django работает нормально локально, но после развертывания на Heroku она обновляется при каждом изменении представления

При локальной работе сессии отлично работают при смене представлений, но при развертывании на Heroku сессия как будто обновляется, и вся содержащаяся в ней информация удаляется при каждом изменении представления. Я использую базу данных Postgres от Heroku.

Я уже посмотрел: Django Session Not Working on Heroku, но проблема все еще сохраняется. У других людей такая же проблема, но четкого ответа нет.

Вот мой текущий файл настроек. Любая помощь будет оценена по достоинству

import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent


SECRET_KEY = 'e488a0185303170daa47fe1de243823fbb3db60f045e6eae'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ['127.0.0.1', 'here goes the heroku host']


# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    '....',
    '....',

]
ASGI_APPLICATION = 'System.asgi.application'
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'System.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates']
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'System.wsgi.application'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
 }
import dj_database_url

db_from_env = dj_database_url.config()
DATABASES['default'].update(db_from_env)

SESSION_ENGINE= 'django.contrib.sessions.backends.cached_db'


AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
        'OPTIONS': {'min_length': 8}
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'authentication.validators.NumericValidator',
    },
    {
        'NAME': 'authentication.validators.UppercaseValidator',
    },
    {
        'NAME': 'authentication.validators.LowercaseValidator',
    },

]
LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'America/New_York'

USE_I18N = True

USE_L10N = True

USE_TZ = False

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

MEDIA_ROOT = os.path.join(BASE_DIR, 'authentication/media/')
MEDIA_URL = '/authentication/media/'

Вы сохраняете сессии в базе данных, что является разумным выбором на Heroku, но вы используете SQLite в качестве базы данных.

Эфемерная файловая система Героку делает SQLite плохим выбором базы данных. Данные не будут обмениваться между дино и будут потеряны при каждом перезапуске вашего дино. Это происходит часто (по крайней мере, один раз в день).

Независимо от того, как вы решите работать с сессиями, вам следует перейти с SQLite на клиент-серверную базу данных, например PostgreSQL, если вы хотите продолжать использовать Heroku. Простое выполнение этой задачи, скорее всего, решит проблему с сессиями как побочный эффект.

DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': '...db name',
            'USER': "postgres",
            'PASSWORD': '...db password',
            'HOST': 'localhost',
            'PORT': '5432',
      } }
Вернуться на верх