繁体   English   中英

将 Django 部署到 AWS - WSGIPath 指的是一个不存在的文件

[英]Deploying Django to AWS - WSGIPath refers to a file that does not exist

我一直在努力让 Django 和 AWS 协同工作。 我正在关注这里的教程:

https://realpython.com/blog/python/deploying-a-django-app-to-aws-elastic-beanstalk/

我一直在遵循所有教程步骤,包括使用“eb option”命令来更改 WSGIPath,但我不断收到错误消息:

“错误:您的 WSGIPath 引用了一个不存在的文件。”

据我所知,我一直完全按照教程做所有事情。

我的配置文件的相关部分如下所示:

NumProcesses: '1'
NumThreads: '15'
StaticFiles: /static/=static/
WSGIPath: iotd/iotd/wsgi.py

我究竟做错了什么?

我在遇到此错误时发现的一件事是,如果您的存储库是 git 存储库,则必须跟踪和提交 .ebextensions 文件夹,否则将无法在 eb deploy 上正确提取。

我已阅读您提到的 realpython 博客文章。 我还会向您推荐 AWS 教程。 它是为部署裸机 Django 项目而编写的,可以在以下位置找到:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-django.html#python-django-configure-for-eb

我发现解决这个问题很有用,并且学到了很多解决您发现的错误的方法。 当然,修复与我自己对教程的实现有关,我一步一步地遵循了它。 我已阅读其他讨论此问题的帖子,但据我所知,这些帖子中未提供此处所述的解决方案。

下面是本教程的缩写版本,为此处所做的评论提供一些上下文。 此缩写版本在创建/激活虚拟环境之后开始,但在其激活之前。

$ mkdir ed_django_app
$ . venv/Scripts/activate
(venv)[~eb_django_app]$ django-admin startproject django_eb
(venv)[~eb_django_app/django_eb]$ python manage.py migrate
(venv)[~eb_django_app/django_eb]$ python manage.py runserver
(venv)[~eb_django_app]$ pip freeze > requirements.txt
(venv)[~eb_django_app]$ deactivate
[~eb_django_app]$ eb init –region us-east-1

在“eb init”命令之后,.elasticbeanstalk 目录以及一些文件将在初始化过程中创建。 在该目录中,您将找到 config.yml 文件。 其内容是:

branch-defaults:
  default:
    environment: eb-django-dev
global:
  application_name: eb_django_app
  default_ec2_keyname: myec2keyname
  default_platform: Python 2.7
  default_region: us-east-1
  profile: eb-cli
  sc: null

本教程指导开发人员创建一个名为 .ebextensions 的目录并创建 01-eb_django.config 文件:

option_settings:
  "aws:elasticbeanstalk:application:environment":
    DJANGO_SETTINGS_MODULE: "django_eb.settings"
    PYTHONPATH: "/opt/python/current/app/django_eb:$PYTHONPATH"
  "aws:elasticbeanstalk:container:python":
    WSGIPath: "django_eb/django_eb/wsgi.py"

这是 YAML,缩进很重要。 至少 1 个空格缩进。 在这种情况下,每一级有 2 个缩进空格。 WSGIPath 设置正确。 确保目录结构与教程中指示的相同非常重要。

在本教程中,现在发出了“eb create”命令,正如您所指出的,出现了以下情况:

错误:WSGIPath 引用了一个不存在的文件

已确定的问题存在于 config.yml 中,其中存在 application_name 的密钥对:

global:
  application_name: eb_django_app

改为:

global:
  application_name: django_eb

这为我解决了错误。

使用eb

eb config

转到aws:elasticbeanstalk:container:python:并将 WSGIPath 从:

application.py

mysite/wsgi.py

“mysite”是您的应用程序名称ofcourse

可能的解决方案错误:您的 WSGIPath 引用了一个不存在的文件

遵循本教程后: https : //realpython.com/deploying-a-django-app-to-aws-elastic-beanstalk/

我在将保护上传到 aws 时遇到错误。 我忘记的步骤是激活我的虚拟环境,然后在那里输入命令“eb deploy”

注意:此错误也可能在不同情况下发生

这在 django.config 文件中,说你的应用程序名称是“yourappname”,对我有用。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM