您的WSGIPath指的是不存在的文件

时间:2015-07-01 18:45:03

标签: amazon-web-services flask elastic-beanstalk

我试图将我的Flask应用程序上传到AWS,但是我收到错误:

  

您的WSGIPath是指不存在的文件。

在网上挖掘后我发现在.ebextensions文件夹中,我应该指定路径。没有.ebextensions文件夹,因此我创建了一个并将以下代码添加到名为settings.config的文件中:

option_settings:
  "aws:elasticbeanstalk:container:python":
    WSGIPath: project/application.py

WSGIPath是application.py文件的正确路径,所以我不确定是什么引发了这个错误。我是否正确地改变了WSGIPath,是否有更好的方法或是否存在导致这种情况发生的其他问题?感谢。

5 个答案:

答案 0 :(得分:36)

在AWS上部署Flask可能会出现很多配置问题。我遇到了与你类似的问题,所以我至少可以告诉你我为解决WSGI错误所做的工作。

首先,显然您可以在没有.ebextensions文件夹的情况下执行此操作(请参阅此文here。)并查看davetw12的答案。但请注意,虽然这有效,但我不是完全确定davetw12关于.ebextensions的结论是正确的,基于下面的一些评论)。相反,(在终端中),我导航到与我的.elasticbeanstalk目录处于同一级别的项目并使用命令eb config。这将打开一个可以设置的选项列表来配置beanstalk应用程序。深入了解选项,直到找到WSGI路径。我注意到你的设置为project/application.py,但是,这不应该包含文件夹引用,只是application.py。以下是它在终端上的Mac上的样子(WSGI路径靠近底部)。

enter image description here

请注意,一旦获得该设置,EB可能会重新部署。没关系。让它。

获得该设置后,请进入您的application.py文件,并确保拨打您的应用application。例如,我的看起来像这样:

from flask import Flask
from flask import render_template
application = Flask(__name__)

@application.route('/')
@application.route('/index')
def index():
    return render_template('index.html',
                           title='Home')

这消除了WSGI路径错误 - 虽然我仍然需要解决其后的一些其他问题:-)但这是一组不同的问题。

答案 1 :(得分:11)

如果此处有人通过AWS控制台(GUI)进行操作,请修改配置并按如下所示在WSGIPath中输入脚本名称。

enter image description here

如果您是新手,我会给一些提示。

  • 您还应该匹配脚本名称和Flask对象
  • 常见错误:压缩源代码时,您需要 选择文件并压缩,而不是文件夹。 (确保您拥有 zip根目录中的.py)
from flask import Flask
application = Flask(__name__)

@application.route("/")
def hello():
    return "Hello"

if __name__ == "__main__":
    application.run()

答案 2 :(得分:0)

我有同样的信息,但出于非常愚蠢的原因。

显然,当我将回购邮件克隆到我的Windows PC然后推回更改时,Windows的某处将“.ebextensions”文件夹更改为“ebextensions”(删除了前导“。”)。

因此,当我将主文件夹中的文件夹重命名为“.ebextensions”时,一切都恢复正常。

答案 3 :(得分:0)

对我来说,问题是我拼错了文件名:

我写了:..ebextensions/django.conf

在需要时:..ebextensions/django.config

今天我一生要花费大约3个小时。问题在于AWS错误会误导您,因为它所指的“ WSGIPath”不是上面的文件,而是一些不可见的默认值。

答案 4 :(得分:0)

就我而言,尝试许多解决方案并不能解决问题,而是从

更改了WSGIPath
option_settings:
  "aws:elasticbeanstalk:container:python":
    WSGIPath: project_name/application_name.py

option_settings:
      "aws:elasticbeanstalk:container:python":
        WSGIPath: project_name.wsgi

像魅力一样工作。这是文件结构:

├── manage.py
├── mysite ***
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py ***
├── myvenv
│   └── ...
└── requirements.txt