使用fly.io部署Django站点时因分配异常失败求助
解决Django部署到fly.io的问题
1. 修复ModuleNotFoundError: No module named 'demo'
这个错误源于gunicorn启动命令里的demo.wsgi中的demo并非你实际的Django项目名称。找到你项目中包含wsgi.py文件的文件夹名称(即执行django-admin startproject时指定的项目名),将命令里的demo替换为该名称。
例如,若你的项目文件夹名为myproject,启动命令需改为:
CMD ["gunicorn", "--bind", "0.0.0.0:8080", "--workers", "2", "myproject.wsgi"]
2. 统一端口配置
你的fly.toml设置的PORT为8080,但Dockerfile里EXPOSE的是8000、gunicorn绑定的也是8000,端口不一致会导致fly.io健康检查失败,需统一为8080:
- 修改Dockerfile的
EXPOSE行:EXPOSE 8080 - 将gunicorn的bind参数改为
0.0.0.0:8080,0.0.0.0表示监听所有网络接口,解决无法绑定公网IP的问题
3. 修正静态文件路径配置
fly.toml中静态文件的guest_path设为/app/public,但Django的collectstatic默认将文件收集到STATIC_ROOT指定的目录,需做如下调整:
- 在Django项目的
settings.py中设置:STATIC_ROOT = "/code/public" - 修改
fly.toml的statics部分,将guest_path改为与STATIC_ROOT一致的路径:[[statics]] guest_path = "/code/public" url_prefix = "/static/"
4. 重新部署验证
完成上述修改后,执行fly deploy重新部署,之后:
- 用
fly logs查看日志,确认模块错误是否消除 - 用
fly status检查实例是否处于健康状态
内容的提问来源于stack exchange,提问作者YI-CHI HUANG
相关产品推荐
相关产品推荐

