[英]How to deploy Flask app to AWS Elastic beanstalk using an application factory
[英]How to deploy structured Flask app on AWS elastic beanstalk
使用此处列出的步骤成功部署测试应用程序后: http : //docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_Python_flask.html
我试图部署我的实际烧瓶应用程序,它具有以下结构:
myApp/
runServer.py
requirements.txt
myApp/
__init__.py
helpers.py
clean.sh
static/
myApp.css
handlers/
__init__.py
views.py
templates/
layout.html
viewOne.html
viewTwo.html
其中views.py
包含我的url映射。
我已尝试在根目录以及myApp
模块和git aws.push
初始化eb
实例,但我在AWS仪表板上收到以下错误: ERROR Your WSGIPath refers to a file that does not exist.
并且应用程序不起作用(任何路径为404)。
如何将上述Flask
应用程序部署到弹性beanstalk?
将以下内容添加到.ebextensions/<env-name>.config
:
option_settings:
"aws:elasticbeanstalk:container:python":
WSGIPath: myApp/handlers/views.py
更新:
如果您没有.ebextensions目录,请为项目创建一个。 您可以在“ 自定义和配置AWS Elastic Beanstalk环境”指南中找到有关容器配置的更多信息。
我遇到了类似的问题,将Flask应用程序部署到EB,具有类似的目录结构,并且必须做两件事:
更新我的manage.py以创建名称应用程序的对象,而不是app
import os from application import create_app, db from flask.ext.script import Manager, Shell application = create_app(os.getenv('FLASK_CONFIG') or 'default') manager = Manager(application)
创建.ebextensions/myapp.config
,并定义以下块以指向manage.py
option_settings: "aws:elasticbeanstalk:container:python": WSGIPath: manage.py "aws:elasticbeanstalk:container:python:staticfiles": "/static/": "application/static/"
这让Elastic Beanstalk正确地找到了可调用的应用程序。
编辑 - 参见下面的项目结构
从awsebcli 3.0开始,您实际上可以通过eb config
编辑配置设置以表示您的WSGI
路径。 然后, config
命令将根据您当前的配置设置拉(并在默认的命令行文本编辑器中打开它,即nano)一个可编辑的配置。 然后,您将搜索WSGI
并以此方式更新它的路径。 保存文件并退出后,您的WSGI
路径将自动更新。
WSGI配置对我来说很痛苦。 我确实使用eb config
命令更改了WSCI设置,但它没有用。 您可以通过以下5个简单步骤解决此问题。
1-将app.py
函数移动到目录的根目录(我在其中运行eb init
命令。
2- app.py
重命名为application.py
并在该app.py
application.py
中将其重命名为application = Flask(__name__)
而不是app = Flask(__name__)
3 eb deploy
在此之后没有工作(在同一个项目中)我试图通过使用eb config
修复配置,但它太毛茸茸而无法解决它。 从项目中删除所有.extensions,.gitignore等。
4-使用eb init
在EB上重新初始化项目并按照提示操作。 部署完成后, eb open
会启动你的webapp(希望!)
当我遇到这个问题时,那是因为我使用GUI来上传我的项目文件的zip。 最初我正在压缩项目级目录并将该zip文件上传到EB。
然后我切换到只是上传项目文件的拉链 - 即选择所有文件并将其发送到zip - 然后GUI上传实用程序能够找到我的application.py文件没有问题,因为application.py文件是不在子文件夹中。
好吧,在我的情况下,我遵循了整个过程和约定,但仍然得到404.问题是我的虚拟环境。 我在.gitignore中忽略了所有与环境配置相关的文件夹/文件,但在.ebignore中没有。 创建.ebignore并忽略与项目代码无关的所有文件夹/文件后,修复了该问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.