You need to enable JavaScript to run this app. AWS Elastic Beanstalk部署Django遇502 提示无application模块
优惠活动
大模型
产品
解决方案
定价
更多

AWS Elastic Beanstalk部署Django遇502 提示无application模块

问题核心原因

报错ModuleNotFoundError: No module named 'application'会直接导致Gunicorn worker进程启动失败,Nginx反向代理没有可用的后端服务就返回502错误,最终触发环境状态降级。
这个问题不是wsgi.py的代码逻辑有问题,本质是Amazon Linux 2版本Elastic Beanstalk Python平台的默认入口加载逻辑,和旧版平台存在适配差异:
平台默认启动Gunicorn时,会优先尝试加载项目根目录下application.py文件中的WSGI实例,不会自动将项目代码目录加入Python模块搜索路径,也不能正确解析todo.wsgi这类点分格式的WSGI路径配置,最终因为找不到名为application的模块导致启动崩溃。

可直接落地的修复步骤
  • 校验项目目录结构
    确认部署包内的文件层级符合要求,不要出现文件位置错位:

    项目根目录(部署时上传的最外层文件夹)
    ├── manage.py
    ├── requirements.txt
    ├── django.config
    └── todo/  # Django项目配置目录
        ├── __init__.py
        ├── settings.py
        ├── urls.py
        └── wsgi.py  # 现有的wsgi.py文件必须存放在这个目录下
    

    只要wsgi.py没有放在todo子目录里,对应的模块路径就肯定匹配失败。

  • 修正django.config的WSGI配置写法
    旧版平台下写WSGIPath: todo.wsgi可以正常工作,但在Amazon Linux 2平台,需要明确指定要加载的callable对象,调整后的配置内容:

    option_settings:
      aws:elasticbeanstalk:container:python:
        WSGIPath: todo.wsgi:application
    

    这种带冒号的写法会直接告诉Gunicorn,加载todo/wsgi.py文件里名为application的实例作为WSGI入口,从根源上避免Gunicorn默认去找根目录下不存在的application.py文件。

  • 确认部署包没有遗漏必要文件
    检查.gitignore或.ebignore的规则,不要把todo目录下的wsgi.py、__init__.py这类基础文件排除在部署包外。可以在本地执行eb deploy --dry-run,核对打包的文件列表,确认todo/wsgi.py确实在待上传的文件里。

  • 重新部署验证
    执行eb deploy上传修改后的配置,等环境状态从“Degraded”恢复为“Ok”之后,再执行eb open访问页面。

排障补位方法

如果调整配置后仍然报同样的错,可以通过eb ssh登录到运行的EC2实例,进入代码存放目录/var/app/current/,执行命令:
python -c "from todo.wsgi import application"
如果这个命令执行报导入错误,就直接说明是文件缺失或者路径写错;如果命令执行正常,就检查环境变量里的Python路径配置有没有问题。


内容的提问来源于stack exchange,提问作者NatalieLes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.06 22:15:04