在弹性豆茎上创建环境时出现 502

Posted

技术标签:

【中文标题】在弹性豆茎上创建环境时出现 502【英文标题】:502 occurs when creating environment on elastic beanstalk 【发布时间】:2022-01-10 08:08:21 【问题描述】:

我在部署我的第一个 Django 项目时遇到问题。

这是我的config.yml

global:
  application_name: testapp
  branch: null
  default_ec2_keyname: aws-eb
  default_platform: Python 3.8 running on 64bit Amazon Linux 2
  default_region: us-west-2
  include_git_submodules: true
  instance_profile: null
  platform_name: null
  platform_version: null
  profile: eb-cli
  repository: null
  sc: null
  workspace_type: Application

这是我的django.config

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

我已关注this doc。但是在我做了eb create testapp-env 之后,我得到了 502 错误: image of the error

如果您需要,我会提供更多信息。提前感谢您的帮助。

这是web.stdout.log中的错误:

django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

更新

我的 django 项目使用 python-socketio,这是我的 wsgi.py:

from django.core.wsgi import get_wsgi_application
import socketio
from post.socketioserver import sio # <- it's just my socket io code

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoproject.settings')

django_app = get_wsgi_application()
application = socketio.WSGIApp(sio, django_app)

我收到另一个错误:

django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

【问题讨论】:

在 AWS 控制台中打开弹性 beanstalk 环境,然后请求日志,以便您获取更多信息。 我应该查看哪个日志文件?日志文件很多... 我可以看到 web.stdout.log 错误。 【参考方案1】:

需要设置DJANGO_SETTINGS_MODULE环境变量:

option_settings:
   aws:elasticbeanstalk:container:python:
      WSGIPath: djangoproject.wsgi:application
   aws:elasticbeanstalk:application:environment:
      DJANGO_SETTINGS_MODULE: "djangoproject.settings"

您还需要编辑 wsgi.py 文件,因为您在 Django 设置之前访问应用程序:

import django
django.setup()

from django.core.wsgi import get_wsgi_application
import socketio
from post.socketioserver import sio # <- it's just my socket io code

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoproject.settings')

django_app = get_wsgi_application()
application = socketio.WSGIApp(sio, django_app)

【讨论】:

@robust-person 更改wsgi.py 文件后重新启动服务器。重启后,web.stdout.log 中仍然出现相同的错误? 看来我的 wsgi.py 和你的差不多。我有什么缺陷吗? @robust-person 我已经更新了我的答案(同时重启服务器) 我仍然遇到同样的问题。我将更新我的问题以包含错误消息。 @robust-person 这是一个不同的错误(我们已经解决了第一个错误)。您可能会收到新错误,因为您在设置 Django 之前编写了 from post.socketioserver import sio。我已经更新了我的答案。如果重新启动服务器后仍然出现错误,请查看此question。

以上是关于在弹性豆茎上创建环境时出现 502的主要内容,如果未能解决你的问题,请参考以下文章

如何在亚马逊弹性豆茎上强制 https 而不会失败健康检查 [重复]

如何在亚马逊弹性豆茎上强制 https 而不会失败健康检查 [重复]

如何在亚马逊弹性豆茎上强制 https 而不会失败健康检查 [重复]

如何在亚马逊弹性豆茎上强制 https 而不会失败健康检查 [重复]

如何在亚马逊弹性豆茎上强制 https 而不会失败健康检查 [重复]

弹性豆茎上自动缩放的 django 应用程序的多个 celery beat 实例