django - 运行 Gunicorn 和 Django
问题描述
我不知道如何在 django 中使用 gunicorn。你能给我一些帮助吗?
这就是我使用 django 运行服务器的方式。这是https
python3 manage.py runsslserver xx.8x.x3.x4:443 --certificate /etc/letsencrypt/live/callservicesvps.online/fullchain.pem --key /etc/letsencrypt/live/callserv.com/privkey.pem
在gunicorn文档中提到它必须按如下方式执行:
gunicorn myproject.wsgi
在这里我有两个问题。什么是 myproject.wsgi? 我在哪里可以找到它?因为如果我查看 django 项目所在的目录,我在 wsgi 中找到的唯一内容是一个名为 wsgi.py 的文件
按如下方式运行服务器会给我一个错误
gunicorn /home/proyectdirectory/wsgi.py
如果我输入,它也会给我一个错误:
gunicorn /home/proyectdirectory/wsgi:Some_directory_where_the_proyec_is
解决方案
什么是 myproject.wsgi?
myproject.wsgi
wsgi.py
是您在项目中找到的文件。
[回答结束]
但进一步的解释将清楚为什么会这样..
我想大多数人会查看myproject.wsgi
并看到具有扩展文件类型的文件,.wsgi
但这仅仅是因为导入的方式modules
是用 python 编写的。
在继续解释之前,我想澄清什么是 amodule
和 a 。package
什么是模块
模块是包含 Python 定义和语句的文件。
简而言之,module
python 中的 a 只是一个包含任何类型的函数、变量或类等的 python 文件。
什么是包
包只是模块的集合。最简单的例子,一个包含 python 文件的特殊目录。为了告诉 python 一个目录是一个包,它必须有一个__init__.py
在其中命名的文件。您会在 django 项目的不同目录中找到其中的一些。这就是他们在那里的原因。
现在,我可以说我想说的是python中模块命名空间的结构。
package.subpackage.module
如果你查看你的wsgi.py
文件,你会看到一个从 django 自己的wsgi
模块导入的很好的例子。
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '<project>.settings')
application = get_wsgi_application()
进一步来说
from django.core.wsgi import get_wsgi_application
如果您查看django
包装内部,您可以看到它是如何工作的。
django
(包) core
(子包) wsgi
(模块)
请记住,该命令gunicorn myproject.wsgi
应该在 django 项目的基本目录中运行。我一直记得这是包含manage.py
文件的目录。那就是如何以这种方式使用模块命名空间gunicorn
找到文件。毕竟是用python编写的。wsgi.py
gunicorn
gunicorn /home/proyectdirectory/wsgi.py
会出错,因为 python 模块导入不包含/
,即使您尝试过gunicorn home.proyectdirectory.wsgi
home 和 proyectdirectory 也不是 python 包。
现在希望这是有道理的:
“如果gunicorn myproject.wsgi
是指wsgi.py
文件,为什么不直接放gunicorn myproject.wsgi.py
?”
您不能.py
添加扩展名,因为这将引用wsgi
子包中带有文件名的模块py.py
!
推荐阅读
- r - 如何使用调查包的 svyby 函数在多个列上进行循环?
- php - 如何修复直接访问而不是查询链接?
- mongodb - ETL 将数据导入 MongoDB
- python - 使用 Selenium 和 BeautifulSoup,如何提取 javascript 变量?
- ios - 无法连接到开发服务器 iOS
- r - 使用跳过节点的 ggforce 创建桑基图
- node.js - 如何从导入中导出默认值?
- node.js - Zeit 现在,快递请求不触发 nodemailer
- ionic4 - ion-datetime displayFormat 如何在 ionic4 中转义文字?
- python - 更改键名并添加相同键的值