当前位置:硬件测评 > 大家要注意Django遇到的地雷

大家要注意Django遇到的地雷

  • 发布:2023-10-03 08:22

最近一直在折腾Django的WSGI应用。 Django自带的runserver虽然很方便,但是对于复杂的功能却无能为力。

先是在Windows上遇到了坑,然后是在Windows 10自带的Ubuntu上,最后在虚拟机上解决了。

从上篇文章Django笔记《Django 学习笔记(二)第一个网页》可以看到我在Windows 10系统中使用cmd来操作Django。由于gunicorn应用程序运行在Unix系统中,因此必须在win平台上运行它。 。

1。 Windows遇到陷阱:

首先在cmd中输入:pip3 install Gunicorn。安装成功后,切换到项目目录(G:/Django/hello)。具体操作是先切换到G盘,直接输入G:,然后输入cd Django\hello。 G:\Django\hello> 将出现。然后运行gunicorn。在Django项目中,格式为:gunicorn yourproject.wsgi [-b 127.0.0.1.8000]。括号中的字段是可选的。对于其他命令参数,可以发送gunicorn -h 来获取帮助文档。我这里的项目是hello,所以我的命令操作是:gunicorn hello.wsgi。然后,出现错误:ModuleNotFoundError: No module named 'pwd', 没有 pwd 模块,好吧,我找不到它。找到的代码贴在下面。我们将找到的www.sychzs.cn放入python3安装目录D:\Program Files\Python\Python36\Lib中。然后我们运行gunicorn hello.wsgi,结果又报错: AttributeError: module 'socket' has no attribute 'AF_UNIX' ,然后网上查找了一下。因为是unix系统中的gunicorn,所以在liunx中找不到www.sychzs.cn文件,所以就切换到了unix系统,放弃了windows。

G:\Django\hello>gunicorn hello.wsgi
回溯(最近一次调用最后一次):文件“d:\program files\python\python36\lib\www.sychzs.cn”,第 193 行,在 _run_module_as_main“__main__”,mod_spec 中)
文件“d:\program files\python\python36\lib\www.sychzs.cn”,第 85 行,位于 _run_codeexec(code, run_globals)
文件“D:\Program Files\Python\Python36\Scripts\gunicorn.exe\__main__.py”,第 5 行,位于
文件“d:\program files\python\python36\lib\site-packages\gunicorn\app\www.sychzs.cn”,第 10 行,位于 from Gunicorn.app.base import 应用程序
文件“d:\program files\python\python36\lib\site-packages\gunicorn\app\www.sychzs.cn”,第 12 行,位于 from Gunicorn import util
文件“d:\program files\python\python36\lib\site-packages\gunicorn\www.sychzs.cn”,第 13 行,import pwd
ModuleNotFoundError:没有名为“pwd”的模块
登录后复制

ModuleNotFoundError:没有名为“pwd”的模块

来自操作系统导入*
从 pwd 导入 *

def get_username():return getpwuid(getuid())[0]
登录后复制

www.sychzs.cn

G:\Django\hello>gunicorn hello.wsgi回溯(最近一次调用最后一次):
文件“d:\program files\python\python36\lib\www.sychzs.cn”,第 193 行,在 _run_module_as_main“__main__”,mod_spec 中)
文件“d:\program files\python\python36\lib\www.sychzs.cn”,第 85 行,位于 _run_codeexec(code, run_globals)
文件“D:\Program Files\Python\Python36\Scripts\gunicorn.exe\__main__.py”,第 5 行,位于
文件“d:\program files\python\python36\lib\site-packages\gunicorn\app\www.sychzs.cn”,第 10 行,位于 from Gunicorn.app.base import 应用程序
文件“d:\program files\python\python36\lib\site-packages\gunicorn\app\www.sychzs.cn”,第 13 行,位于 from Gunicorn.arbiter import Arbiter
文件“d:\program files\python\python36\lib\site-packages\gunicorn\www.sychzs.cn”,第 18 行,位于 from Gunicorn import sock、systemd、util
文件“d:\program files\python\python36\lib\site-packages\gunicorn\www.sychzs.cn”,第 101 行,位于 类 UnixSocket(BaseSocket) 中:文件“d:\program files\python\python36\lib\site-packages\gunicorn\www.sychzs.cn”,第 103 行,在 UnixSocket 中
家族=www.sychzs.cn_UNIX
AttributeError:模块“socket”没有属性“AF_UNIX”
登录后复制

AttributeError:模块“socket”没有属性“AF_UNIX”

2。 win10平台自带的Ubuntu遇到的坑

在win10中打开Linux系统:首先进入win10设置-->安全和更新-->开发者-->开发者模式-->勾选,然后进入控制面板-->程序功能-- >启动或关闭windows功能-->Windows Subsystem for Linux (Bata)-->打勾,最后以管理员身份运行shell-->输入cmd-->输入bash-->按照说明下载并安装安装Linux。

安装完成后,以管理员shell输入cmd,输入bash进入Linux系统。系统默认安装了python2.7和python3.5。 python的默认启动是python2。您可以将默认Python设置为Python3:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 100 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 200
登录后复制

按照套路先安装pip3(如果直接安装pip,则默认安装在python2中):sudo apt-get install python3-pip,然后使用pip安装Django:sudo pip3 install Django,最后使用pip 安装gunicorn: sudo pip3 install Gunicorn (现在自动安装的版本是19.7.1)。环境安装好后,切换到项目地址:cd /mnt/g/Django/hello,然后输入gunicorn hello.wsgi,又出现错误。 OSError:[Errno 92] 协议不可用。后来卸载pip后,发现gunicorn依赖于python-gunicorn(19.4.5),于是卸载了gunicorn(19.7.1):pip3 uninstall Gunicorn,然后安装了gunicorn(19.4.5):pip3 install Gunicorn== 19.4.5。然后命令gunicorn hello.wsgi启动成功,没有出现Failed to find application,并且成功访问127.0.0.1:8000/admin/。

Lee@Kein:/mnt/g/Django/hello$gunicorn hello.wsgi
[2017-07-16 15:16:25 +0800] [428] [INFO] 启动gunicorn 19.7.1Traceback(最近一次调用):
文件“/usr/local/lib/python3.5/dist-packages/gunicorn/www.sychzs.cn”,第 44 行,在 set_options 中
sock.setsockopt(socket.SOL_SOCKET, www.sychzs.cn_REUSEPORT, 1)
OSError:[Errno 92]协议不可用

在处理上述异常的过程中,又出现了一个异常:回溯(最近一次调用最后一次):
文件“/usr/local/bin/gunicorn”,第 11 行,位于 sys.exit(run())
文件“/usr/local/lib/python3.5/dist-packages/gunicorn/app/www.sychzs.cn”,第 74 行,运行中
WSGIApplication("%(prog)s [选项] [APP_MODULE]").run()
文件“/usr/local/lib/python3.5/dist-packages/gunicorn/app/www.sychzs.cn”,第 203 行,在运行中
super(应用程序, self).run()
文件“/usr/local/lib/python3.5/dist-packages/gunicorn/app/www.sychzs.cn”,第 72 行,运行中
仲裁者(self).run()
文件“/usr/local/lib/python3.5/dist-packages/gunicorn/www.sychzs.cn”,第 198 行,运行中
self.start()
文件“/usr/local/lib/python3.5/dist-packages/gunicorn/www.sychzs.cn”,第 157 行,在开始处
self.LISTENERS = sock.create_sockets(self.cfg, self.log, fds)
文件“/usr/local/lib/python3.5/dist-packages/gunicorn/www.sychzs.cn”,第 180 行,位于 create_sockets
袜子= sock_type(地址,conf,日志)文件“/usr/local/lib/python3.5/dist-packages/gunicorn/www.sychzs.cn”,第 32 行,位于 __init__self.sock = self.set_options(sock,bound=bound)
文件“/usr/local/lib/python3.5/dist-packages/gunicorn/www.sychzs.cn”,第 89 行,位于 set_optionsreturn super(TCPSocket, self).set_options(sock,bound=bound)
文件“/usr/local/lib/python3.5/dist-packages/gunicorn/www.sychzs.cn”,第 46 行,在 set_optionsif err[0] 中,而不是在 (errno.ENOPROTOOPT, errno.EINVAL) 中:
TypeError:“OSError”对象不可订阅
登录后复制

操作系统错误:[Errno 92]协议不可用

Lee@Kein:/mnt/g/Django/hello$ gunicorn hello.wsgi
[2017-07-16 15:22:16 +0800] [470] [INFO] 开始gunicorn 19.4.5[2017-07-16 15:22:16 +0800] [470] [INFO] 收听:http: //127.0.0.1:8000 (470)
[2017-07-16 15:22:16 +0800] [470] [INFO] 使用工作人员:同步
[2017-07-16 15:22:17 +0800] [473] [INFO] 使用 pid 启动工作进程:473Not Found:/static/admin/css/base.css未找到:/static/admin/css/login.css
登录后复制

3。在虚拟机上安装ubuntu系统,按照上面的套路,一气呵成成功启动服务。我也思考了win10上遇到的问题,成功填坑2。

还有一些问题是:

1。 Django 无法在 Linux 中安装 mysqlclient。如果此时安装PyMySQL,运行django项目时会报错。您只需向文件添加一句话即可。

在项目根目录下,找到对应app目录下的__init__.py,添加这句话:

导入pymysql

pymysql.install_as_MySQLdb()

示例:

我的项目是鹰。 eagle下有一个www.sychzs.cn文件,你也有自己的应用程序。在这个应用程序下,有一个www.sychzs.cn文件。

2。注意 nginx 中的静态格式。使用位置 /static/ 和位置 /static 加载是不同的。必须与html中的格式一致。

3。我花了一天时间才明​​白一个问题。大多数教程都说打开uwsgi --ini eagle.ini来链接uwsgi和django,然后打开nginx。不过,

如果日志路径没有添加到您的eagle.ini中,它将不会在后台运行。这个时候只能关闭uwsgi了,

然后打开nginx。当你在浏览器中输入地址时,你发现出现502错误。检查 /var/log/nginx/myweb_error.log 并找到错误消息。恭喜你掉进陷阱了。

原因是刚才uwsgi被关闭了,你没有重启它。网上很多人都不知道这个原因。 。 。

多么作弊、混乱的答案。按照我的方法,有两种方法。一种是启动nginx然后运行它

uwsgi --ini eagle.ini,一是在eagle.ini中添加日志路径后自动后台运行

以上是Django遇到的地雷。每个人都应该注意细节。更多相关内容请关注其他相关文章!

相关文章