AWS Elastic Beanstalk部署Django报错:WSGIPath指向文件不存在
我之前部署Django到Beanstalk时也踩过这个一模一样的坑!咱们一步步来排查和解决:
先核对项目结构是否匹配
首先确认你的本地项目根目录下,确实存在ebdjango/wsgi.py这个文件,而且上传到Beanstalk的代码和本地结构完全一致——有时候.gitignore规则或者上传遗漏会导致服务器上缺少这个文件。你可以在本地执行ls ebdjango/wsgi.py验证,或者通过Beanstalk控制台的「查看应用版本」功能检查上传的代码包结构。检查django.config的格式和位置
这个配置文件必须放在项目根目录的.ebextensions文件夹下(注意是英文句号开头的文件夹),而且YAML格式必须严格正确:正确的格式示例:
option_settings: aws:elasticbeanstalk:container:python: WSGIPath: ebdjango/wsgi.py重点注意:每个冒号
:后面必须跟一个空格,子项必须缩进(通常用2个空格)。YAML对格式非常敏感,哪怕少个空格都会导致配置不生效,Beanstalk会忽略错误的配置,自然找不到指定的WSGI文件。尝试调整路径写法
有时候Beanstalk的工作目录和你预期的有差异,你可以试试两种路径写法:- 相对路径:确保是从项目根目录到wsgi.py的相对路径,比如如果你的wsgi在
src/ebdjango/wsgi.py,那路径就要改成src/ebdjango/wsgi.py - 绝对路径:Beanstalk默认把应用代码部署到
/opt/python/current/app/目录下,所以你可以直接写绝对路径/opt/python/current/app/ebdjango/wsgi.py来验证
- 相对路径:确保是从项目根目录到wsgi.py的相对路径,比如如果你的wsgi在
通过控制台手动设置WSGIPath验证
登录AWS Elastic Beanstalk控制台,进入你的环境,点击「配置」>「软件」>「容器选项」,在「WSGI路径」输入框里手动填入ebdjango/wsgi.py,保存后重新部署。如果这样能成功,说明你的.ebextensions配置文件要么没被正确上传,要么格式有问题。查看部署日志定位问题
如果你还是搞不清原因,可以下载Beanstalk的完整部署日志:在控制台环境页面点击「日志」>「请求日志」>「完整日志」,下载后搜索ebdjango/wsgi.py,看看服务器上是否真的存在这个文件,以及Beanstalk读取的WSGIPath到底是什么值——日志会告诉你所有细节。
内容的提问来源于stack exchange,提问作者Arifur Rahim

