最近有一个项目需要部署到Windows服务器上,因为要用到一个office相关的插件,只有Windows上可以使用。 下面介绍一下如何部署到Windows上。 1. 错误原因分析 找到项目所在节点
验证项目结构 确保项目目录结构符合标准 Django 项目布局:
your_project_root/ # 当前工作目录(运行命令的位置) ├── manage.py # Django 项目管理文件 └── myproject/ # 项目主目录(必须与代码中的模块名一致) ├── init.py # 必须存在(空文件) ├── settings.py # 项目配置文件 ├── urls.py └── wsgi.py # WSGI 入口文件 关键点: myproject 是顶层项目目录(包含 settings.py)。 确保 myproject 目录下存在 init.py 文件(即使为空),使其成为有效 Python 包。 步骤2:检查当前工作目录 运行命令时,必须位于 myproject 的 父目录 中。例如:
正确示例:在 "your_project_root" 目录下运行
cd D:\code_2023\report waitress-serve --port=8000 myproject.wsgi:application 错误示例:在 myproject 目录内运行(会导致 Python 找不到模块): cd D:\code_2023\report\myproject waitress-serve --port=8000 myproject.wsgi:application # 报错!
尝试导入 myproject
import myproject # 如果报错,说明路径或命名问题 预期输出:无错误。 常见修复: 如果 sys.path 中缺少项目根目录,手动添加: sys.path.insert(0, r"D:\code_2023\report") # 项目根目录路径 步骤5:检查代码中的模块引用 确保所有文件(尤其是 wsgi.py 和 settings.py)中引用的模块名称与目录名一致:
myproject/wsgi.py
import os from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings') # 必须与目录名匹配 application = get_wsgi_application() 步骤6:修复项目命名不一致 如果实际项目目录名为 myapp,但代码中写为 myproject,需全局替换名称:
重命名目录: mv myproject myapp # 在项目根目录执行 更新所有相关文件中的引用(如 settings.py、wsgi.py、manage.py)。 3. 完整命令示例 假设项目结构如下:
D:\code_2023\report/ ├── manage.py └── myproject/ ├── init.py ├── settings.py ├── urls.py └── wsgi.py 运行命令:
进入项目根目录
cd D:\code_2023\report
启动服务(使用线程模式)
waitress-serve --port=8000 --threads=4 myproject.wsgi:application
如若报错,尝试运行一下命令验证
python -m myproject.wsgi 如果成功,说明 WSGI 配置正确,问题出在 waitress 命令调用方式。
验证修复 手动启动 Django 开发服务器: python manage.py runserver 0.0.0.0:8000 如果正常访问 http://localhost:8000,则项目配置正确。