AWS Elastic Beanstalk:WSGI 路径不正确?

Posted

技术标签:

【中文标题】AWS Elastic Beanstalk:WSGI 路径不正确?【英文标题】:AWS Elastic Beanstalk: WSGI path incorrect? 【发布时间】:2020-09-14 21:16:39 【问题描述】:

我正在尝试将我的第一个应用程序部署到 EB 并跟随此教程:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-django.html

很遗憾,我在部署最终应用时仍然收到 502 错误。我很困惑,因为我已经按照指示前往发球台了。

我收到以下错误

ImportError: Failed to find application, did you mean 'ebdjango/wsgi:application'?

我不确定这意味着什么。根据说明,我编辑了 django.config 文件以包含以下文本:

option_settings:
  aws:elasticbeanstalk:container:python:
    WSGIPath: ebdjango/wsgi.py

这似乎与我的文件结构相匹配:

- ebdjango
  -.ebextensions
    - django.config
  - .elasticbeanstalk
  - ebdjango
    _ __init__.py
    - settings.py
    - urls.py
    - wsgi.py
  - manage.py
  - requirements.txt

所以配置文件设置正确,对吧?

我正在运行 Python 3.7 和 Django 2.2。

我知道 EB 搜索 application.py,我认为配置文件应该将服务器指向我的自定义应用程序?我在这里错过了什么?

编辑:我也收到此错误:

ModuleNotFoundError: No module named 'ebdjango/wsgi'

我的文件结构有问题吗?

编辑 2:我忘记在我的帖子中包含 init.py 文件,请参阅 Ben 的评论。

【问题讨论】:

__init__.py 文件与wsgi.py 文件在同一目录下吗? 我做的,它是我执行startproject时自动创建的 此错误是因为您使用 Amazon Linux 2 作为平台,该平台使用 Gunicorn 作为 WSGI 服务器,但您指定了“WSGIPath”,这不符合 Gunicorn 标准(您是仍在使用用于 AL1 平台的语法)。我看到下面提到的所有 3 个解决方案都是正确的,但没有解释为什么要进行这些更改,所以我想提供我的 2 美分。如果您正在寻找 AL2 说明,您可能会发现这篇 [Medium Article] (medium.com/@justaboutcloud/…) 很方便。 【参考方案1】:

我有同样的问题。这是因为 Amazon Linux 2 机器映像。它的配置文件与旧版本的配置文件不兼容。请参阅:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.migration-al.html。我最终使用了旧版本,因为文档说:

如果您使用的是处于测试阶段的 Amazon Linux 2 平台版本 你的评价,不要去生产。等到我们发布一个 支持的平台版本。

您可以使用命令行工具使用 Amazon Linux 机器映像(旧版本)创建 Elastic Beanstalk 环境。以下是命令(将<...> 替换为您的数据):

eb init -p python-3.6 <ApplicationName> --region <Region>
eb create <EnvironmentName> --elb-type application --platform "64bit Amazon Linux 2018.03 v2.9.10 running Python 3.6"

2020-06-02 更新 正如我之前提到的,这个问题是由 Amazon Linux 2 平台引起的,因为它使用了 Gunicorn,它的 WSGI 语法与以前的版本不同。 WSGIPath 必须是 ebdjango.wsgi:application。请看https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-container.html#python-namespaces。

【讨论】:

【参考方案2】:

我今天在处理 django.config 文件时遇到了同样的问题。当我将配置选项卡中的 WSGI 路径更改为 ebdjango.wsgi:application 时,它终于对我有用了。

【讨论】:

【参考方案3】:

在您的 django.config 更改中:

option_settings:
  aws:elasticbeanstalk:container:python:
    WSGIPath: ebdjango.wsgi

在你的

import os
from django.core.wsgi import get_wsgi_application
os.environ["DJANGO_SETTINGS_MODULE"] = "ebdjango.settings"
application = get_wsgi_application()

【讨论】:

我也通过使用ebdjango.wsgi而不是ebdjango/wsgi.py来使用此解决方案,但这是我所做的唯一更改。

以上是关于AWS Elastic Beanstalk:WSGI 路径不正确?的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk CLI 安装错误

text AWS Elastic Beanstalk

HTTPS Elastic Beanstalk (AWS) 到 Android

AWS Elastic Beanstalk 无法担任角色

AWS Elastic Beanstalk

AWS Elastic Beanstalk chown PythonPath 错误