Django работает под Apache, а mod_wsgi использует «виртуальную» файловую систему? - PullRequest
0 голосов
/ 03 января 2019

Хорошо, я знаю, что это странно, но после дня поиска я не смог найти ответа на эту проблему.

Эта система работает уже два года с Django под Apache с классической установкой mod_wsgi.Точное зеркало веб-сайта используется для разработки и тестирования.

Чтобы ускорить запрос, я использовал встроенный кеш Django, используя файловый бэкэнд.В разработке (встроенный сервер Django) все работает нормально, и файл создается под /var/tmp/django_cache.Все работает и в производстве, но файл не создается.

Я был удивлен, поэтому я начал экспериментировать и вставил кучу отпечатков в модули django.core.cache и следил за выполнением кеша.В определенный момент я дошел до os.makedirs, который ничего не создает.Я вставил open(), создал файл (абсолютный путь) и ничего не создано.Пытался прочитать обратно из несуществующего файла, и содержимое было там.

Я действительно озадачен.Кажется, что-то есть некая «виртуальная» файловая система, которая работает правильно, но параллельно с реальной вещью.Я использую Django 1.11.11.

Кто творит магию?Джанго, Апач, mod_wsgi?Что-то еще?

1 Ответ

0 голосов
/ 03 января 2019

Хорошо, @DanielRoseman был прав: «Скорее всего, файл создается в другом месте».Причина, по которой это может повлиять на работу любой файловой системы, заключается в том, что эта функция systemd называется PrivateTmp .Из документации :

устанавливает новое пространство имен файловой системы для выполняемых процессов и монтирует внутри него частные каталоги / tmp и / var / tmp, которые не используются процессами извнепространства имен

На самом деле в /tmp и /var/tmp есть куча папок, называемых чем-то вроде systemd-private-273bc022d82337529673d61c0673a579-apache2.service-oKiLBu.

Каким-то образом моя команда find так и не достиглаэти папки.Все созданные файлы находятся в очень обычной файловой системе.Теперь я также понимаю, почему перезапуск Apache очищает кеш Django.systemd удаляет приватный tmp процесса и создает новый для нового процесса.

Я нашел ответ здесь: https://unix.stackexchange.com/a/303327/329567

...