Django: конфликт между живыми и промежуточными сайтами на одном сервере - PullRequest
2 голосов
/ 19 июня 2009

Я недавно выпустил приложение Django вживую. Мы создали приложение в промежуточном поддомене на сервере. Когда я начал работу, я скопировал файлы промежуточного субдомена на основной сайт, создал промежуточную базу данных и указал старый промежуточный сайт на новую промежуточную базу данных (оставив новый действующий сайт, указывающий на исходную базу данных). Это на mod_python под Apache.

Я создал уникальные настройки SESSION_COOKIE_NAME для обоих сайтов и установил для SESSION_COOKIE_DOMAIN значение ".sitename.com" для действующего сайта и None для промежуточного.

Проблема, с которой мы сталкиваемся, заключается в том, что пользователи в реальном времени администратора вносят изменения, которые (кажется) сохраняются на промежуточном сайте. Пользователи также выходят с сайта администратора "случайно" во время запросов.

Есть что-то, что я здесь явно делаю неправильно? Должен ли SESSION_COOKIE_DOMAIN быть "www.sitename.com", чтобы ограничить его, так как поддомен находится на "staging.sitename.com"? Оставил ли я старую информацию о сеансе в действующей базе данных (я запустил ./manage.py, очистил и удалил все сеансы из действующей базы данных до появления этой проблемы)?

Спасибо

1 Ответ

3 голосов
/ 20 июня 2009

Мы столкнулись с этой проблемой в последние несколько недель. Было несколько мест, где это могло перекрываться.

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 {} \;

Это будет означать, что изменения в вашем развертывании не были перекомпилированы по той или иной причине.

Надеюсь, это поможет!

...