在虚拟环境用uwsgi部署Django4.1时的出现的问题的解决思路

一.缘由

首先Django推出了4.1版本,正好重构了项目,故需要部署。但是由于本人头极铁,不想使用docker,所以想试试用虚拟环境去部署Django
其次,之前部署过Django,过程Django学习记录11——利用uwsgi在ubuntu18.04server上部署

二.虚拟环境

  • 先使用了apt安装了python3.8
  • 然后在/home/ubuntu/目录下使用python -m venv django4创建了一个虚拟文件夹,可以使用source ./django4/bin/activate激活虚拟环境

三.问题一:安装包失败

3.1现象

安装各种包的时候,出现了各种包括单不限于:

`Command "/usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip-build-46IKo9/pillow/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-LQwgnq-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-46IKo9/pillow`

等问题

3.2 解决思路(均激活虚拟环境)

  • 先考虑是不是缺了什么依赖包,对比本地环境和虚拟环境,把缺的包用pip补上,结果是无济于事。
  • 最后发现了报错关键字error: command 'x86_64-linux-gnu-gcc' failed with exit status 1fatal error: Python.h:,考虑会不会是编译问题。
  • 通过apt补下了许多python的依赖包,最后在虚拟环境的环境中下载了对应版本的依赖库sudo apt-get install python3.8-dev,此时pip安装依赖库不会出错

四.Django无法使用数据库

4.1 现象

用户名密码IP全正确的情况下,出现了:
"Access denied for user 'KannaWeb'@'127.0.0.1' to database 'KannaWeb'

4.2 解决过程

  • 手动登陆数据库,成功。
  • 最后发现是表名的问题,新版宝塔会自动将数据库名称的大写转为小写。改下代码即可。
    在这里插入图片描述

五. uWSGI失效

5.1 现象

  • 用之前的.ini能启动uwsgi,但是无法访问网页,进程也很离谱。用uwsgi --stop <uwsgi pid file>killall -s INT uwsgi都杀不掉。杀就报错:signal_pidfile()/kill(): No such process [core/uwsgi.c line 1693]或者其他问题。
  • 使用python manage.py runserver能跑通服务器,决定是uwsgi的问题,决定倒找问题。

5.2 解决过程

5.2.0 补充一下虚拟环境的目录结构

ubuntu@VM-4-2-ubuntu:~/django4$ tree -L 2
.
├── bin
│   ├── Activate.ps1
│   ├── activate
│   ├── activate.csh
│   ├── activate.fish
│   ├── django-admin
│   ├── easy_install
│   ├── easy_install-3.8
│   ├── pip
│   ├── pip3
│   ├── pip3.8
│   ├── python -> python3.8
│   ├── python3 -> python3.8
│   ├── python3.8 -> /usr/bin/python3.8
│   ├── sqlformat
│   ├── uwsgi
│   └── wheel
├── include
├── lib
│   └── python3.8
├── lib64 -> lib
├── pyvenv.cfg
└── share
    └── python-wheels

5.2.1 先找systemctl的问题

打开web_uwsgi.service查看代码:

[Unit]
Description=HTTP Interface Server For Django

[Service]
#自己修改一下路径
ExecStart=/usr/local/bin/uwsgi --ini /www/wwwroot/Kanna/uwsgi.ini
ExecReload=/usr/local/bin/uwsgi --reload /www/wwwroot/Kanna/log/pid/uwsgi.pid
ExecStop=/usr/local/bin/uwsgi --stop /www/wwwroot/Kanna/log/pid/uwsgi.pid

[Install]
WantedBy=multi-user.target

好像虚拟环境有个uwsgi啊,改下目录试试呢。把三个XXX=/usr/local/bin/uwsgi改成了虚拟环境的uwsgi
问题没有解决

5.2.2再看uwsgi的log

这部分主要就是看log写了啥,看看里面的路径什么的对不对,或者有没有其他报错信息。

  • 看前面的logPython version: 3.6.9 (default, Dec 9 2021, 17:53:27),果然是uwsgi没整对。
    刚才改了路径后Service启动的uwsgi成了:Python version: 3.8.0 (default, Dec 9 2021, 17:53:27) [GCC 8.4.0]这个对了。
    同理,用uwsgi --ini uwsgi.ini时,必须进入虚拟环境!
  • 再看log sys._base_executable = '/home/ubuntu/django4/bin//bin/python'。好家伙,路径错了。我在uwsgi.ini里写的: virtualenv=/home/ubuntu/django4/bin,是目录重叠了!改好路径后,成功运行!

六.总结

通过这次的部署,我得到了以下收获:

  • 遇到问题一定要把报错看全,不要拿起半头就开始百度。多思考报错内容是在项目的哪部分,与项目是什么关系,如何去解决这部分问题。
  • 当对外输出的报错信息没有用时,去看看运行日志,或者思考运行流程。面向过程的排查与解决问题。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,这是一个关于如何使用uWSGI部署Django项目的简单步骤: 1. 安装uWSGIDjango 首先,你需要安装uWSGIDjango。你可以使用pip安装这些软件包。在命令行中输入以下命令: ``` pip install uwsgi pip install django ``` 2. 创建Django项目 创建一个Django项目,并确保它能够在本地运行。 3. 创建uWSGI配置文件 创建一个名为uwsgi.ini的文件,该文件将包含uWSGI的配置信息。在这个文件中,你需要定义Django应用程序的位置、uWSGI服务器的配置和其他必要的配置。这是一个示例uwsgi.ini文件: ``` [uwsgi] project = myproject base_dir = /path/to/my/project chdir = %(base_dir)/%(project) module = %(project).wsgi:application home = /path/to/my/virtualenv processes = 4 threads = 2 socket = /tmp/%(project).sock chmod-socket = 664 vacuum = true ``` 在这个文件中,你需要将project和base_dir替换为你的项目名称和项目路径。你还需要将home设置为你的虚拟环境的路径,如果你没有使用虚拟环境,则可以将其删除。processes和threads指定了uWSGI服务器使用的进程和线程数。socket定义了uWSGI服务器的套接字位置。chmod-socket将套接字的访问权限设置为664,这样你的Web服务器可以访问它。vacuum=true将在uWSGI服务器停止清除套接字文件。 4. 启动uWSGI服务器 运行以下命令启动uWSGI服务器: ``` uwsgi --ini /path/to/your/uwsgi.ini ``` 5. 配置Web服务器 最后,你需要将Web服务器配置为将请求转发到uWSGI服务器。这个过程取决于你使用的Web服务器。如果你使用Nginx,你可以使用以下示例配置文件: ``` server { listen 80; server_name example.com; location / { include uwsgi_params; uwsgi_pass unix:/tmp/myproject.sock; } } ``` 在这个文件中,你需要将server_name替换为你的域名。uwsgi_pass指定了请求应该转发到的uWSGI服务器套接字位置。 这就是使用uWSGI部署Django应用程序的基本步骤。希望这可以帮助你开始。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

康娜喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值