nginx+uwsgi+django, в uwsgi какой-то странный кеш, помогите

Это конфигурация uwsgi:

[uwsgi]  
uid = 500
listen=200
master = true  
profiler = true 
processes = 8 
logdate = true  
socket = 127.0.0.1:8000  
module = www.wsgi  
pythonpath = /root/www/
pythonpath = /root/www/www 
pidfile = /root/www/www.pid  
daemonize = /root/www/www.log  
enable-threads = true
memory-report = true
limit-as = 6048

Это конфигурация Nginx:

server{  
    listen 80;  
    server_name 119.254.35.221;      
    location / {  
        uwsgi_pass 127.0.0.1:8000;  
        include uwsgi_params;  
    }  
}

Джанго работает нормально, но измененные страницы нельзя увидеть, пока я не перезапущу uwsgi. worker может прочитать и ответить на измененную страницу, но другие просто показывают старую, кто кеширует старую страницу? я ничего не настраивал о кеше)

Я не настраивал django, и он хорошо работает с «менеджером запуска сервера python ...», но у меня возникла эта проблема при работе с nginx + uwsgi.

(nginx и uwsgi - это новая установка, я уверен, что здесь ничего больше не настроено ..)


person liangdong from baidu    schedule 27.09.2012    source источник
comment
Это ожидаемое поведение, Apache (например, во встроенном режиме) ведет себя аналогично.   -  person Tadeck    schedule 27.09.2012


Ответы (2)


  • uwsgi не перезагружает ваш код автоматически, это делает только сервер разработки
  • runserver предназначен для отладки, uwsgi и nginx — для производства.
  • в производстве вы можете перезапустить uwsgi с помощью service uwsgi restart или через скрипт init.d
  • есть еще лучший способ перезагрузить uwsg с помощью touch-reload

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

person Marat    schedule 28.09.2012
comment
Я использовал демон uwsgi-emperor вместо демона uwsgi, поэтому вместо него мне пришлось выпустить sudo service uwsgi-emperor reload. Однако я решил просто использовать сервер запуска manage.py для использования разработчиками; так как он построен для такого использования. - person ThorSummoner; 28.12.2015

Это нормальное поведение. uwsgi не будет перечитывать ваш код, пока вы не перезапустите его (он не работает, как runserver, когда у вас есть DEBUG=True).

Если после того, как вы обновили свой код, перезапустили uwsgi, очистили кеш браузера, но он по-прежнему не отражает ваши изменения, вам следует удалить *.pyc файлов из исходного каталога.

Я обычно использую это:

find . -name "*.pyc" -exec rm {} \;

Грубо говоря, .pyc — это «скомпилированная» версия вашего кода. Python загрузит эту оптимизированную версию, если не обнаружит изменений в исходном коде. Если вы удалите эти файлы; затем он перечитает ваши исходные файлы.

person Burhan Khalid    schedule 27.09.2012
comment
Большое спасибо за вашу помощь ! Должен ли я использовать manager.py при разработке и отладке своего проекта? - person liangdong from baidu; 27.09.2012
comment
Да; используйте uwsgi+nginx только для развертывания. runserver был разработан специально для разработки. - person Burhan Khalid; 27.09.2012