赞
踩
部署完成后, 访问首页没有问题
但访问登录页, 注册页等其它页面都出现了SyntaxError
在我的ubuntu服务器里的nginx配置如下
sudo vi /etc/nginx/conf.d/nginx.conf
# 设定负载均衡的服务器列表 upstream meiduo{ server 192.168.250.130:8001; # 本机的uwsgi服务器 } # 虚拟主机的配置,一个server就代表一个虚拟主机 server { # 监听端口80 listen 192.168.250.130:80; # 域名可以有多个, 用空格隔开 server_name www.meiduo.site; # 资源定位 location =/{ # 站点根目录,你网站文件存放的地方 root /home/ws/Desktop/meiduo/meiduo_mall/meiduo_mall/static; index index.html; } location =/index.html{ root /home/ws/Desktop/meiduo/meiduo_mall/meiduo_mall/static; } location /static{ root /home/ws/Desktop/meiduo/meiduo_mall/meiduo_mall; } location /detail{ root /home/ws/Desktop/meiduo/meiduo_mall/meiduo_mall/static; } location /{ # 访问其它路径的转发到upstream meiduo include uwsgi_params; uwsgi_pass meiduo; } } # 后台前端页面 server { # 监听端口8080 listen 192.168.250.130:8080; # 域名可以有多个, 用空格隔开 server_name www.meiduo.site; # 资源定位 location =/{ # 站点根目录,你网站文件存放的地方 root /home/ws/Desktop/meiduo_mall_admin; index index.html; } }
分析: 服务器监听80端口, 把除了首页, /static, /detail之外的其它路径都转发给upstream meiduo, 由uWSGI服务器来处理, 那么不能访问其它页面应该是uWSGI服务器的问题
meiduo/meiduo_mall/uwsgi.ini
[uwsgi] #使用nginx连接时使用,Django程序所在服务器地址 socket=192.168.250.130:8001 #项目目录 chdir=/home/ws/Desktop/meiduo/meiduo_mall #项目中wsgi.py文件的目录,相对于项目目录 wsgi-file=meiduo_mall/wsgi.py # 进程数 processes=4 # 线程数 threads=2 # uwsgi服务器的角色 master=True # 存放进程编号的文件 pidfile=uwsgi.pid # 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的 daemonize=uwsgi.log # 指定依赖的虚拟环境 virtualenv=/home/ws/.pyvirenv/meiduo
感觉没什么问题, 于是查看同目录下的日志文件 uwsgi.log
ERROR log 224 Internal Server Error: /login/
Traceback (most recent call last):
File “./meiduo_mall/urls.py”, line 31, in
path(‘meiduo_admin/’, include(‘meiduo_admin.urls’)),
File “/home/ws/Desktop/meiduo/meiduo_mall/meiduo_mall/apps/meiduo_admin/urls.py”, line 5, in
from .views import statistical, users, specs, images, skus, orders,
File “/home/ws/Desktop/meiduo/meiduo_mall/meiduo_mall/apps/meiduo_admin/views/images.py”, line 6, in
from …serializers.images import ImagesSerializer, SKUSerializer
File “/home/ws/Desktop/meiduo/meiduo_mall/meiduo_mall/apps/meiduo_admin/serializers/images.py”, line 2, in
from fdfs_client.client import Fdfs_client
File “/home/ws/.pyvirenv/meiduo/lib/python3.8/site-packages/fdfs_client/client.py”, line 12, in
from fdfs_client.utils import *
File “/home/ws/.pyvirenv/meiduo/lib/python3.8/site-packages/fdfs_client/utils.py”, line 230
print get_file_ext_name(’/bc.tar.gz’)
相关的部分报错信息如上, 那么原因很可能是下面调用的这个地方
这里的settings应该是指哪个文件呢?
在wsgi.py中指出了, settings模块是meiduo_mall/settings/dev.py
而在settings/dev.py中, 定义的FDFS_CLIENT_PATH在
meiduo/meiduo_mall/meiduo_mall/utils/fastdfs/client.conf
进到client.conf, 里面的有效配置如下, 没什么异常
connect_timeout=30
network_timeout=60
base_path=/home/ws/Desktop/meiduo/meiduo_mall/logs
tracker_server=192.168.250.130:22122
log_level=info
use_connection_pool = false
connection_pool_max_idle_time = 3600
load_fdfs_parameters_from_tracker=false
use_storage_id = false
storage_ids_filename = storage_ids.conf
http.tracker_server_port=80
综上, 两个都没问题, 但是在找问题的过程中我发现了一个新问题, 会不会是这个问题导致的呢?
之前在mac上开发时, 我有把这两个目录mark directory as Souces Root
但是当把项目拷贝到服务端时, 这两个就不再是source root了
又发现在settings/dev.py已经把apps添加到导包路径了
那么就还剩meiduo/meiduo_mall没添加到导包路径, 那么这个路径会被自动添加到sys.path吗?
由于之前一直是通过python mange.py sunserver, 而manage.py就在meiduo/meiduo_mall中, 所以这个目录是会被自动添加的
但是现在不一样, 现在是通过uWSGI服务器来运行Django应用框架的
uwsgi --ini uwsgi.ini
可以看到, 这条语句跟python没有半毛钱关系, 所以不会添加当前文件路径到sys.path(导包路径)
既然是meiduo/meiduo_mall没有添加到导包路径, 那解决起来也很简单
由于BASE_DIR = ‘/Users/ws/PycharmProjects/meiduo/meiduo_mall/meiduo_mall’
那么定位到meiduo/meiduo_mall/, 取父目录即可
在settings/dev.py中
import sys
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
sys.path.insert(0, os.path.join(BASE_DIR, '..')) # 加上这一句即可
print(sys.path)
然后重新运行uwsgi
查看日志, 发现确实要这样操作, sys.path才有这两个导包路径
但是!!! 题目的问题还是没能解决
再回来认真看看meiduo_mall/logs/meiduo.log日志文件吧,
what the fuck, 这里居然出现了python2的代码,
呃, 之前在python3.6上测试没什么问题嘛, 现在换为ubuntu自带的python3.8就不行了?那就再给ubuntu整一个python3.6的解释器试试
换为python3.6后果然不报错了, 但是报内部服务器错误
看下uwsgi.log
突然想起来uwsgi.ini里有个virtualenv路径没改, 改一下再重启uwsgi试试
好吧, 还是回到了起点, 说明也不是py解释器版本的问题
那之前为什么可以呢?
找到之前的笔记, 发现以前安装fdfs-client-py并不是通过pip install
而是安装的从Github上下载的支持py3的fdfs-client-py版本
pip install fdfs_client-py-master.zip
但是后来我们是通过pip install -r requirements, 所以不行
那看来问题还是出自fdfs-client-py, 网上有文章说这个模块只支持python2, python3要用py3fdfs
然后代码跟fdfs-client-py的有一点点差异
from fdfs_client.client import Fdfs_client, get_tracker_conf
tracker_path = get_tracker_conf(settings.FDFS_CLIENT_PATH) # 多一步这个
cli = Fdfs_client(tracker_path)
再重启uwsgi试试, 终于成功了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。