为什么不在 Django 的生产环境中使用 "runserver"?

Why not use "runserver" for production at Django?

我到处都看到每个人都推荐将 uWSGI 和 Gunicorn 用于生产模式。但是,使用它会带来更多麻烦,python manage.py runserver 更快、更简单,如果出现问题,日志记录也更加可见。不过,为什么不推荐现场制作使用“python manage.py runserver”命令呢?

runserver 管理命令针对 Web 服务器的不同事物进行了优化。以下是它所做的一些对本地开发非常有用但会在生产环境中增加不必要开销的事情 (source):

  • 开发服务器会根据需要为每个请求自动重新加载Python代码
  • 当您启动服务器时,每次您在服务器 运行 期间更改 Python 代码时,系统检查框架将检查您的整个 Django 项目是否存在一些常见错误
  • 如果启用了 staticfiles contrib 应用程序,则提供静态文件(在某种程度上,docs describe 被认为“效率极低且可能不安全”)

同时,生产网络服务器旨在处理大规模并行工作负载,并且也符合 much higher security 标准,因为它们是所有端口 80/443 流量到服务器的入口点