【问题标题】:nginx+uwsgi+django, there seems to be some strange cache in uwsgi, help menginx+uwsgi+django,uwsgi中好像有一些奇怪的缓存,帮帮我
【发布时间】:2023-03-17 00:59:01
【问题描述】:

这是 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;  
    }  
}

django 工作正常,但是除非我重新启动 uwsgi,否则无法看到修改的页面。(此外,当我配置 8 个工作进程时,当我按下 ctrl+f5 一会儿时,我可以看到修改后的页面,似乎只有特定的worker可以读取和响应修改后的页面,而其他的只是显示旧的,谁缓存了旧的页面?我没有配置任何关于缓存的东西)

我没有配置django,它与“python manager runserver ...”配合得很好,但是在使用nginx+uwsgi时会出现这个问题。

(nginx和uwsgi都是新安装的,我确定这里没有配置其他东西..)

【问题讨论】:

  • 这是预期的行为,Apache(例如在嵌入式模式下)的行为类似。

标签: python django nginx uwsgi


【解决方案1】:

这是正常行为。 uwsgi 不会重新读取您的代码,除非您重新启动它(当您有 DEBUG=True 时,它不像 runserver 那样工作)。

如果在您更新代码、重新启动 uwsgi、清除浏览器缓存并且它仍然没有反映您的更改后,那么您应该从源目录中删除 *.pyc 文件。 p>

我通常使用这个:

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

粗略地说,.pyc 是您的代码的“编译”版本。如果 Python 未检测到源代码的更改,它将加载此优化版本。如果您删除这些文件;然后它将重新读取您的源文件。

【讨论】:

  • 非常感谢您的帮助!当我使用我的项目进行开发和调试时,我应该使用 manager.py 吗?
  • 是的;仅使用 uwsgi+nginx 进行部署。 runserver 专为开发而开发。
【解决方案2】:
  • uwsgi 不会自动重新加载您的代码,只有开发服务器会这样做
  • runserver 用于调试,uwsgi 和 nginx 用于生产
  • 在生产中,您可以通过service uwsgi restart 或通过 init.d 脚本重新启动 uwsgi
  • 使用touch-reload 重新加载uwsg 有更好的方法

通常不需要清理.pyc 文件,只有当文件上的时间戳错误时才会发生(我在整个职业生涯中只见过几次)

【讨论】:

  • 我使用的是uwsgi-emperor 而不是uwsgi 守护进程,所以我不得不发出sudo service uwsgi-emperor reload。不过,我选择只使用 manage.py 运行服务器供开发人员使用;因为它是为这种用途而设计的。
猜你喜欢
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 2011-11-26
  • 2015-01-18
  • 2014-05-31
  • 1970-01-01
  • 2011-10-10
  • 2011-11-25
相关资源
最近更新 更多