Django + WSGI: обновление проблем?

SimpleORM, потому что это просто и без волшебства. Это определяет все структуры метаданных в коде Java и очень гибко.

SimpleORM обеспечивает схожую функциональность для Спящего режима путем отображения данных в реляционной базе данных к объектам Java в памяти. Запросы могут быть определены с точки зрения объектов Java, объектные идентификационные данные выровненные ключей базы данных, отношения между объектами поддерживаются и изменили объекты, автоматически сбрасываются к базе данных с оптимистическими блокировками.

, Но в отличие от этого В спящем режиме, SimpleORM использует структуру очень простого объекта и архитектуру, которая избегает потребности в сложном парсинге, код байта, обрабатывающий и т.д. SimpleORM, является маленьким и прозрачным, упаковывается в двух банках просто 79K и 52K в размере только с одной маленькой и дополнительной зависимостью (Slf4j). (Будьте в спящем режиме, по 2400K плюс приблизительно 2000K зависимых Банок.) Это делает SimpleORM легким понять и так сильно снижает технический риск.

7
задан mpen 28 October 2009 в 09:06
поделиться

4 ответа

Вы можете решить эту проблему, не редактируя свой код на работающем сервере. Серьезно, этому нет оправдания. Разрабатывайте локально, используя контроль версий, и, если необходимо, запустите свой сервер в режиме реального времени с помощью ловушки после фиксации, которая проверяет вашу последнюю версию и перезапускает Apache.

2
ответ дан 6 December 2019 в 06:14
поделиться

Прочтите документацию по mod_wsgi, а не полагайтесь на минимальную информацию о хостинге mod_wsgi, содержащуюся на сайте Django. В частности, прочтите:

http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode

Здесь рассказывается, как именно перезагрузка исходного кода работает в mod_wsgi, включая монитор, который можно использовать для реализации такой же сортировки. перезагрузки исходного кода, который выполняет Django runserver. Также посмотрите, где говорится о том, как применить это к Django.

http://blog.dscpl.com.au/2008/12/using-modwsgi-when-developing-django.html http: // blog .dscpl.com.au / 2009/02 / source-code-reloading-with-modwsgi-on.html

5
ответ дан 6 December 2019 в 06:14
поделиться

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

Вы можете решить эту проблему, используя режим демона, как описано здесь . В частности, вы захотите добавить следующие директивы в конфигурацию Apache:

WSGIDaemonProcess example.com processes=2 threads=15 display-name=%{GROUP}
WSGIProcessGroup example.com
5
ответ дан 6 December 2019 в 06:14
поделиться

Запуск процесса в режиме демона не поможет. Вот что происходит:

mod_wsgi порождает несколько идентичных процессов для обработки входящих запросов для вашего сайта Django. Каждый из этих процессов является собственным интерпретатором Python и может обрабатывать входящий веб-запрос. Эти процессы являются постоянными (они не запускаются и не завершаются для каждого запроса), поэтому один процесс может обрабатывать тысячи запросов один за другим. mod_wsgi может обрабатывать несколько веб-запросов одновременно, поскольку существует несколько процессов.

Интерпретатор Python каждого процесса будет загружать ваши модули (ваши собственные файлы Python) всякий раз, когда выполняется «модуль импорта». В контексте django это произойдет, когда из-за веб-запроса потребуется новый view.py. После загрузки модуля он остается в памяти, поэтому любые изменения, внесенные в файл, не будут отражены в этом процессе. По мере поступления новых веб-запросов интерпретатор Python процесса будет просто использовать версию модуля, которая уже загружена в память. Вы видите несоответствия между обновлениями, поскольку каждый веб-запрос, который вы делаете, может обрабатываться разными процессами. Некоторые процессы могли загружать ваши модули Python во время более ранних версий вашего кода, тогда как другие могли загружать их позже (поскольку эти процессы не получали веб-запрос).

Простое решение: каждый раз, когда вы изменяете свой код, перезапустите Apache процесс. В большинстве случаев это так же просто, как запуск от имени пользователя root из оболочки "/etc/init.d/apache2 restart". Я считаю, что простая перезагрузка тоже работает, что быстрее, "/etc/init.d/apache2 reload"

Решение демона: Если вы используете mod_wsgi в режиме демона, то все, что вам нужно сделать, это коснуться (команда unix) или изменить файл сценария wsgi. Чтобы прояснить сообщение scrompt.com, изменения исходного кода Python не приведут к перезагрузке вашего кода mod_wsgi. Перезагрузка происходит только тогда, когда файл сценария wsgi был изменен.

Последнее замечание: я говорил о wsgi только как об использовании процессов для простоты. wsgi фактически использует пулы потоков внутри каждого процесса. Я не считал, что эта деталь имеет отношение к этому ответу, но вы можете узнать больше, прочитав о mod_wsgi .

Перезагрузка происходит только тогда, когда файл сценария wsgi был изменен.

Последнее замечание: я говорил о wsgi только как об использовании процессов для простоты. wsgi фактически использует пулы потоков внутри каждого процесса. Я не считал, что эта деталь имеет отношение к этому ответу, но вы можете узнать больше, прочитав о mod_wsgi .

Перезагрузка происходит только тогда, когда файл сценария wsgi был изменен.

Последнее замечание: я говорил о wsgi только как об использовании процессов для простоты. wsgi фактически использует пулы потоков внутри каждого процесса. Я не считал, что эта деталь имеет отношение к этому ответу, но вы можете узнать больше, прочитав о mod_wsgi .

17
ответ дан 6 December 2019 в 06:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: