我试图将我的Flask应用程序上传到AWS,但是我收到错误:
您的WSGIPath是指不存在的文件。
在网上挖掘后我发现在.ebextensions文件夹中,我应该指定路径。没有.ebextensions文件夹,因此我创建了一个并将以下代码添加到名为settings.config的文件中:
option_settings:
"aws:elasticbeanstalk:container:python":
WSGIPath: project/application.py
WSGIPath是application.py文件的正确路径,所以我不确定是什么引发了这个错误。我是否正确地改变了WSGIPath,是否有更好的方法或是否存在导致这种情况发生的其他问题?感谢。
答案 0 :(得分:36)
在AWS上部署Flask可能会出现很多配置问题。我遇到了与你类似的问题,所以我至少可以告诉你我为解决WSGI错误所做的工作。
首先,显然您可以在没有.ebextensions文件夹的情况下执行此操作(请参阅此文here。)并查看davetw12的答案。但请注意,虽然这有效,但我不是完全确定davetw12关于.ebextensions的结论是正确的,基于下面的一些评论)。相反,(在终端中),我导航到与我的.elasticbeanstalk目录处于同一级别的项目并使用命令eb config
。这将打开一个可以设置的选项列表来配置beanstalk应用程序。深入了解选项,直到找到WSGI路径。我注意到你的设置为project/application.py
,但是,这不应该包含文件夹引用,只是application.py
。以下是它在终端上的Mac上的样子(WSGI路径靠近底部)。
请注意,一旦获得该设置,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中输入脚本名称。
如果您是新手,我会给一些提示。
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