将 Django 部署到 AWS - WSGIPath 引用不存在的文件

Posted

技术标签:

【中文标题】将 Django 部署到 AWS - WSGIPath 引用不存在的文件【英文标题】:Deploying Django to AWS - WSGIPath refers to a file that does not exist 【发布时间】:2015-06-06 09:36:10 【问题描述】:

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

我做错了什么?

【问题讨论】:

在为此苦苦挣扎了几天之后,我认为这个建议对遇到此类问题的人来说非常有用。检查您的日志(最后 100 行就足够了)并扫描以查找 WSGI 文件的尝试。就我而言,WSGI 路径最终是 proj/proj/proj/wsgi.py 不完全相关,但如果有人正在寻找关于此的更新文章,请找到此处提到的 1:***.com/questions/62058404/… 【参考方案1】:

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

【讨论】:

这个这个这个。我现在不得不重新发现两次。奇怪的是,我在任何地方的文档中都看不到它,除非在某种程度上将 git 与您的服务器代码 deopled EB 一起使用并不常见?奇数 哇,好球!对于 requirements.txt 文件也是如此。我永远不会猜到这是个问题。文档页面将您重定向到“将 EB CLI 与 git 一起使用”页面,但不太清楚 require.txt 是否也需要在 git 存储库中。 非常感谢!我被困在这一点上。我认为它必须是 git,因为这是我唯一改变的东西。我做了git init,在.gitignore 中指定了.ebextensions,然后做了eb deploy,得到了这个错误。【参考方案2】:

我已阅读您提到的 realpython 博客文章。我还建议您参考 AWS 教程。它是为部署一个简单的 Django 项目而编写的,可以在以下位置找到它:

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

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

以下是本教程的缩写版本,为此处制作的 cmets 提供了一些背景信息。此缩略版本在创建/激活虚拟环境之后但在其激活之前开始。

$ 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

这为我解决了错误。

【讨论】:

我们遇到了未安装 psycopg2 的问题。将这些文件添加到我们的 .ebextensions/01-app.config: packages: yum: postgresql93-devel: [] 我完成了本教程并坚持忘记将更改提交到 ".ebextensions/01-app.config" 。在 git commit 和“eb deploy”之后,一切都按预期工作。【参考方案3】:

使用eb

eb config

转到 aws:elasticbeanstalk:container:python: 并将 WSGIPath 更改为:

application.py

mysite/wsgi.py

当然,“mysite”是您的应用程序名称

【讨论】:

我仍然收到同样的错误“您的 WSGIPath 引用的文件不存在。” 您的主应用程序中应该有一个 wsgi.py 文件,即 settings.py 文件所在的位置。使用该路径。如果您没有 wsgi,那是您的问题... 你为什么使用正斜杠语法而不是点语法? @AlxVallejo 正斜杠只是您的应用程序的目录 如果您按照docs.aws.amazon.com/elasticbeanstalk/latest/dg/… 的教程操作并收到此错误,那么这就是目前的解决方案。【参考方案4】:

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

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

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

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

【讨论】:

欢迎提供解决方案链接,但请确保您的答案在没有它的情况下有用:add context around the link 这样您的其他用户就会知道它是什么以及为什么会出现,然后引用最相关的您链接到的页面的一部分,以防目标页面不可用。 Answers that are little more than a link may be deleted. @Zoe - 不确定这是仅链接的答案,因为答案明确指出了解决问题所需的步骤。【参考方案5】:

这在 django.config 文件中,说你的应用名称是'yourappname', 为我工作。

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

【讨论】:

以上是关于将 Django 部署到 AWS - WSGIPath 引用不存在的文件的主要内容,如果未能解决你的问题,请参考以下文章

将 Django 部署到 AWS - WSGIPath 引用不存在的文件

ModuleNotFoundError:没有名为“应用程序”的模块 [将 Django 部署到 AWS]

将 Django 应用程序部署到 AWS 时出现“ValueError:要解压的值太多”

如何将 Django Fixtures 部署到 Amazon AWS

将 Django 部署到 AWS Fargate 时,如何将本地 ip 添加到 ALLOWED_HOSTS

将 Django 应用程序部署到 Amazon AWS Elastic Beanstalk 时遇到问题