解决因为uWSGI部署产生的No Mode lNamed xxx 问题

1 celery不能使用的具体情况

  • 当时用独立的celery模块为项目添加了定时、超时和异步任务,当时celery是可以使用的,超时以及定时任务都实现了效果,但是会遇到如下问题。

1.1 No Model named celery_task

  • 前端和后端实现部署以后,每当调用到celery的代码,就会出现这样的问题
  • 查阅了很多资料,最后发现必须要在项目函数内部,添加根路径才能识别。
1.1.1 项目目录

1.1.2 解决方案
  • 在引入模块的地方加上文件夹根目录
  • 一定要在内部导包
sys.path.insert(0, r'/home/worker/opwf_project')
from celery_task import tasks
tasks.send_email.delay(user_list)

1.2 No Named Celery

  • 在解决完以上错误后,又显示找不到Celery方法
1.2.1 出现问题的地方

1.2.2 解决方案
  • 将启动文件改成celery_lk.py
  • 这样可以防止引入时和方法名重名
# 还需注意的地方,这样命名以后,就不能用以前文件夹启动celery的方法
# 启动命令改为
celery -A celery_task.celery_lk worker  -l INFO
celery -A celery_task.celery_lk beat  -l INFO

2 Django路径问题引入

2.1 路径问题引入

import sys
当前文件夹优先搜索(同名会覆盖)
BASE_DIR 指的是django项目根路径
print(os.path.abspath(__file__))
# 当前文件绝对路径
# /root/shiyanlou_project/syl/syl/settings.py
print(sys.path.insert(0,os.path.join(BASE_DIR,'apps')))
# /root/shiyanlou_project/syl/apps/

2.2 操作系统文件绝对路径

django静态文件查找,模板查找

# 去配置好的文件夹中查找指定的文件
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_URL = '/static/'
# /teacher/shiyanlou_project/syl/apps/user/			# linux
# E:\_000XSX

2.3 django导包路径

第一访问:当前文件夹
导包之前,包的上级路径,需要存在于python system的path
sys.path 这是一个列表
'''
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
'''
from xxx import yyy 才能成功
第二访问才回去路径,列表的索引为0

2.4 django模型引用路径

想使用一个 models.py 文件中的模型
apps名称.model模型名
'users.User'

3 部署排错时一些常用命令

3.1 nginx命令

systemctl restart nginx				# 重启nginx
tail -f /var/log/nginx/error.log	# 查看nginx错误日志
tail -f/var/log/nginx/access.log	# 查看接入日志

3.2 uwsgi重启

uwsgi --ini uwsgi.ini						# 启动
cd /home/worker/opwf_project/uwsgi_conf		# 切换到指定路径
tail -f *									# 查看指定
ps -ef|grep uwsgi							# 查看uwsgi启动端口

3.3 查看端口占用情况

netstat -anptu | grep 8888
原文地址:https://www.cnblogs.com/mapel1594184/p/14120302.html