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


我一直在努力让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

我究竟做错了什么?


11186
2018-04-01 16:20


起源



答案:


我已经阅读了你提到的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

这解决了我的错误。


5
2018-05-01 04:49



我们遇到了没有安装psycopg2的问题。将这些文件添加到我们的.ebextensions / 01-app.config:packages:yum:postgresql93-devel:[] - Gal Bracha
我做了这个教程并且忘记了git将更改提交到“.ebextensions / 01-app.config”。在git commit和“eb deploy”之后,一切都按预期工作。 - pac


答案:


我已经阅读了你提到的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

这解决了我的错误。


5
2018-05-01 04:49



我们遇到了没有安装psycopg2的问题。将这些文件添加到我们的.ebextensions / 01-app.config:packages:yum:postgresql93-devel:[] - Gal Bracha
我做了这个教程并且忘记了git将更改提交到“.ebextensions / 01-app.config”。在git commit和“eb deploy”之后,一切都按预期工作。 - pac


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


4
2018-05-10 20:17