Как Django продолжает использовать правильные файлы, когда я проверяю ветку Git? - PullRequest
0 голосов
/ 04 июля 2018

Как Django и / или мой веб-сервер хранят данные, которые он должен использовать, когда я переключаю ветки Git?

Насколько я понимаю, когда я извлекаю ветку в Git, настоящая файловая система изменяется. Это правда? Если да, то как Django и веб-сервер сохраняют файлы в такте, существовавшем при запуске сервера?

Например:


Создать views.py в основной ветке

return HttpResponse("<h1>Hello world!</h1>")

Запустить сервер (используя daphne):

daphne -b 0.0.0.0 -p 9000 my_app.asgi:application

вывод моего приложения:

Привет, мир!

Внести изменения в views.py (ветка разработки)

return HttpResponse("<h1>Thanks for Visting!</h1>")

Обновление страницы

Выход не меняется:

Привет, мир!

Сбить сервер

Ctrl + C

Запустить сервер (используя daphne):

daphne -b 0.0.0.0 -p 9000 my_app.asgi:application

Новый вывод

Спасибо за посещение!


Я понимаю, что горячая перезагрузка - это особенность, но как Django и веб-сервер избегают использования измененных файлов в новой ветке?

1 Ответ

0 голосов
/ 04 июля 2018

Проблема в том, что ваш файл views.py читается только один раз, при первом импорте модуля. После этого Python больше не будет смотреть этот файл на диске, поэтому ваши изменения не будут иметь никакого эффекта.

В целом, любой веб-сервер должен иметь четко определенный способ обновления своего контента. Если он не был специально разработан для обновления себя при изменении базовой файловой системы, вы не должны ожидать, что он будет работать в этой ситуации.

Что произойдет с Python, в частности, так это то, что код будет загружен из файловой системы один раз, когда модуль импортирован, а затем снова не будет затронут. Таким образом, если вы обновите файловую систему во время работы процесса Python, модули, которые уже были импортированы, будут использовать старый код, в то время как новые импортированные модули будут использовать новый код. (Подробнее о кэшировании модулей в Python см. этот вопрос .)

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

Из-за таких сложностей развертывание производства обычно работает иначе. Это может включать в себя явное завершение работы и перезапуск, или может включать подключение нового сервера с новым кодом в ожидании закрытия соединений на старом сервере. В любом случае, это будет зависеть от конкретного документированного способа использования веб-сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...