问题1:**Internal Server Error (uwsgi启动失败)
查看报错:ModuleNotFoundError: No module named xxx 找不到python模块。
其中unable to load app 0 暂时不用管,其实不影响运行。
Traceback (most recent call last):
File "/home/*xx*/mysite/mysite/__init__.py", line 2, in <module>
import pymysql
ModuleNotFoundError: No module named 'pymysql'
unable to load app 0 (mountpoint='*xxx:8000*|') (callable not found or import error)
原因:python 搜索路径找不到python模块
解决办法:
第一种:UWSGI.ini 增加 pythonpath**
如下:
pythonpath =/home/zr/mysite/env/lib/python3.11/site-packages
[uwsgi]
socket = xxxx.xxx.xxx:9090
chdir= /home/zr/mysite
# home = /home/zr/mysite/env
## PYTHONHOME =/home/zr/mysite/env/bin
pythonpath =/home/zr/mysite/env/lib/python3.11/site-packages
# env = DJANGO_SETTINGS_MODULE=mysite.settings
wsgi-file = mysite.wsgi
module=mysite.wsgi:application
master = true
vhost = true
no-site = true
workers = 2
reload-mercy = 10
vacuum = true
max-requests = 1000
limit-as = 512
buffer-size = 30000
pidfile = /home/zr/mysite/uwsgi_dir/uwsgi.pid
daemonize = /home/zr/mysite/uwsgi_dir/uwsgi.log
网上还有其他文章说,增加home、pythonhome 实则不需要,加了也不能解决此问题。根本原因是sys.path 中不包含site-packages ,因此还有下面的方法:
第二种:
在项目的__init__.py 中增加
import sys
sys.path.append(‘/home/zr/mysite/env/lib/python3.11/site-packages’)
问题2:静态资源403 forbidden
注意点有以下:
- 项目settings文件 DEBUG=False
同时需要配置STATIC_URL = ‘/static/’ 和STATIC_ROOT =‘static’ 参考 https://codeleading.com/article/45873388071/
(更正:STATIC_ROOT需要写绝对路径,而且此参数只是用于项目收集静态文件,便于部署。仅仅影响前期部署,不会造成403问题) - nginx.conf
增加 location /static/ {
alias /home/zr/mysite/my_static/;
} - 查看nginx 进程,确保用户是自己的用户(root应该也可以).【一般造成403是这个启动用户的问题】
如果用户是www-data 则是nginx默认配置,该用户无权限访问咱的文件。
需修改nginx.conf首行:(感谢网友的帖子https://blog.youkuaiyun.com/m0_74139794/article/details/134235944)
user zr;
worker_processes auto;