Django: конфликт между живыми и промежуточными сайтами на одном сервере
Я недавно выпустил приложение Django вживую. Мы создали приложение в промежуточном поддомене на сервере. Когда я начал работу, я скопировал файлы промежуточного субдомена на основной сайт, создал промежуточную базу данных и указал старый промежуточный сайт на новую промежуточную базу данных (оставив новый действующий сайт, указывающий на исходную базу данных). Это на mod_python под Apache.
Я создал уникальные настройки SESSION_COOKIE_NAME для обоих сайтов и установил для SESSION_COOKIE_DOMAIN значение ".sitename.com" для действующего сайта и "Нет" для промежуточного сайта.
Проблема, с которой мы сталкиваемся, заключается в том, что пользователи в реальном времени администратора вносят изменения, которые (как представляется) сохраняются на промежуточном сайте. Пользователи также выходят из сайта администратора "случайным образом" во время запросов.
Я что-то здесь не так делаю? Должен ли SESSION_COOKIE_DOMAIN быть "www.sitename.com", чтобы ограничить его, так как поддомен находится на "staging.sitename.com"? Оставил ли я старую информацию о сеансе в действующей базе данных (я запустил./manage.py clean и удалил все сеансы из действующей базы данных до того, как возникла эта проблема)?
Спасибо
1 ответ
Мы столкнулись с этой проблемой в последние несколько недель. Было несколько мест, где это могло пересекаться.
1) Вы используете отдельных интерпретаторов Python? Есть несколько способов настроить mod_python, чтобы потоки не наступали друг на друга. Ключевыми моментами здесь являются предоставление отдельного ServerName (в данном случае, доменов staging.sitename.com и www.sitename.com), а также предоставление отдельного параметра конфигурации PythonInterpreter в вашем файле конфигурации Apache vhosts.
PythonInterpreter mysite
Соответствующие документы Django при развертывании на одном сервере
2) Вы работаете с кешем на том же порту? В settings.py есть конфигурация, которая позволяет вам добавлять кешированный контент в несколько символов, чтобы отделить промежуточный контент от живого контента. Это реализовано с помощью следующей конфигурации в settings.py:
CACHE_MIDDLEWARE_KEY_PREFIX = "STG_"
Другим вариантом может быть запуск на отдельных кэшах файловой системы какое-то время, чтобы увидеть, решена ли проблема. В settings.py попробуйте добавить
CACHE_BACKEND = 'file:///var/tmp/django_cache'
3) Вы пытались удалить все ваши файлы.pyc? Как ни странно, когда два вышеупомянутых решения не смогли решить нашу проблему, мы запустили команду bash, чтобы удалить все скомпилированные файлы python (файлы.pyc), пока сервер был остановлен.
find ./ -type f -name "*.pyc" -exec rm -f {} \;
Это указывает на то, что изменения в вашем развертывании не перекомпилировались по той или иной причине.
Надеюсь это поможет!