当前位置: 首页 > 工具软件 > ipaddr-py > 使用案例 >

python manage.py runserver/collectstatic gunicorn 三者命令详情

田仲卿
2023-12-01

   运用Django进行WEB开发,有三条比较重要的命令值得深入了解一下。

runserver

命令:


python manage.py runserver [addrport]

(manage.py也可改为django-admin)

其中addrport为端口号。常能看到命令:“python manage.py runserver 127.0.0.1:8000”。执行意义:在本地机器上启动一个轻量级的开发网络服务器。默认情况下,该服务器在 IP 地址 127.0.0.1 的 8000 端口上运行。你可以明确地传递一个 IP 地址和端口号。(源于Django官网)所以执行该命令之后,正确情况下就能启动Django项目。

collectstatic

命令:

python manage.py collectstatic

(manage.py也可改为django-admin)

看英文名就可以猜其意,"collect static"收集静态。意义就是:将静态文件收集到STATIC_ROOT。

    比如在部署项目时,往往需要将静态文件打包,而本地的静态文件目录往往是不会被直接加载进去的,这就需要打包,而Django部署项目,就需要collectstatic进行打包,而该命令并不是必须执行的。但在部署上线项目时,有时就会发现静态文件CSS、JS文件等未被找到,样式全无的现象。

    在Django项目中,当在本地运行的静态文件生效而服务器不生效,这里如果是JS文件,那么可以用开发者工具检查是不是跑404错误,若是,则说明该静态资源未被成功加载。有两种解决尝试:1.把前端的JS文件引入从相对静态路径改为对应网址引入,比如:


/static/element-ui/lib/index.js  ==> 
https://unpkg.com/element-ui/lib/index.js

或者 2.在配置文件中记录好静态位置,载入static,比如:
 


{% load static %}
{% static "element-ui/lib/index.js" %}

同时,根据DJANGO官网提供,findstatic命令:

python manage.py findstatic element-ui/lib/index.js

查询是否打包入该静态文件。

    目前新型的开发框架,比如腾讯蓝鲸开发框架,是会在部署上PaaS平台上进行打包,而不会使用本地打包的文件(就是本地的STATIC_ROOT)(一般都能从日志查到对应的collectstatic操作命令结果),此时就可以在本地进行打包测试,找到对应的STATIC_ROOT看文件是否存在或findstatic命令查询,或者部署后预发布环境用开发者工具测试。

    本地在runserver运行一般就需访问到需使用的静态文件,Django会默认去查询配置文件的STATICFILES_DIRS、STATIC_URL、STATIC_ROOT 相关。但部署到服务器上或测试平台上时,本地的static目录与其他打包未上传的文件是无法被读到的。所以其中可能就有静态文件的错误出现。

gunicorn

Gunicorn ('Green Unicorn') 是一个 UNIX 下的纯 Python WSGI 服务器(是一个高性能的Python WSGI HTTP Server)。它没有其它依赖,可以使用 ``pip``安装。

安装命令:


python -m pip install gunicorn

检测是否安装成功命令:

gunicorn -h

此时就不会用manage.py runserver的指令,而是启动服务命令(比如):

gunicorn -w 4 -b 127.0.0.1:8000 wsgi:application

其他参数具体意义在本文最末尾处。

把Django项目部署上服务器就会用到此命令,同时gunicorn也只能在Linux环境下使用。用来解析HTTP请求的网关服务。

WSGI HTTP Server:

WSGI(Web Server Gateway Interface),是为了让web和app解耦再把它们连接起来,在Web Server和Web APP之间的一种通用接口开发规范。

pre-fork worker model:

用gunicorn启动时,主线程会调用listen方法绑定指定好的URL和端口,并获取文件描述符,且有fork(复刻)出的多个子线程worker被传递文件描述符做处理,全部的worker会被另一个线程master管控着,master不负责处理请求。这些worker处理完HTTP请求与被Web APP调用后,再整理成HTTP Response,通过TCP返回给客户端。

gunicorn 参数

-c CONFIG    : CONFIG,配置文件的路径,通过配置文件启动;生产环境使用;

-b ADDRESS   : ADDRESS,ip加端口,绑定运行的主机;

-w INT, --workers INT:用于处理工作进程的数量,为正整数,默认为1;

-k STRTING, --worker-class STRTING:要使用的工作模式,默认为sync异步,可以下载eventlet和gevent并指定

--threads INT:处理请求的工作线程数,使用指定数量的线程运行每个worker。为正整数,默认为1。

--worker-connections INT:最大客户端并发数量,默认情况下这个值为1000。

--backlog int:未决连接的最大数量,即等待服务的客户的数量。默认2048个,一般不修改;

-p FILE, --pid FILE:设置pid文件的文件名,如果不设置将不会创建pid文件


--access-logfile FILE   :要写入的访问日志目录

--access-logformat STRING:要写入的访问日志格式

--error-logfile FILE, --log-file FILE  :要写入错误日志的文件目录。

--log-level LEVEL   :错误日志输出等级。


--limit-request-line INT   :HTTP请求头的行数的最大大小,此参数用于限制HTTP请求行的允许大小,默认情况下,这个值为4094。值是0~8190的数字。

--limit-request-fields INT   :限制HTTP请求中请求头字段的数量。此字段用于限制请求头字段的数量以防止DDOS攻击,默认情况下,这个值为100,这个值不能超过32768

--limit-request-field-size INT  :限制HTTP请求中请求头的大小,默认情况下这个值为8190字节。值是一个整数或者0,当该值为0时,表示将对请求头大小不做限制


-t INT, --timeout INT:超过这么多秒后工作将被杀掉,并重新启动。一般设定为30秒;

--daemon:是否以守护进程启动,默认false;

--chdir:在加载应用程序之前切换目录;

--graceful-timeout INT:默认情况下,这个值为30,在超时(从接收到重启信号开始)之后仍然活着的工作将被强行杀死;一般使用默认;

--keep-alive INT:在keep-alive连接上等待请求的秒数,默认情况下值为2。一般设定在1~5秒之间。

--reload:默认为False。此设置用于开发,每当应用程序发生更改时,都会导致工作重新启动。

--spew:打印服务器执行过的每一条语句,默认False。此选择为原子性的,即要么全部打印,要么全部不打印;

--check-config   :显示现在的配置,默认值为False,即显示。

-e ENV, --env ENV:设置环境变量;

“wsgi:application”即项目根目录下的wsgi.py文件,application为自定义的app命名。

gunicorn详情,内容参考文章(其实例部分可不看):

http://t.csdn.cn/CCfZN

其文章最后的图片部分可助于理解gunicorn步骤流程:

http://t.csdn.cn/k5WGS

gunicorn各类命令参考:

http://www.manongjc.com/detail/12-ohdxvmyasuzxzcu.html

内容参考Django官网:

docs.djangoproject.com

具体其他参数命令可搜索Django官网的DOCUMENTATION(文件)搜索命令词:runserver、collectstatic、gunicorn,或关键词全局搜索即可。

想一起学更多编程与数学知识,欢迎关注我的公众号:一路向东

(一名数学专业的腾讯开发工程师邀请你)

 类似资料: