繁体   English   中英

如何在AWS弹性beanstalk上部署结构化Flask应用程序

[英]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,具有类似的目录结构,并且必须做两件事:

  1. 更新我的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) 
  2. 创建.ebextensions/myapp.config ,并定义以下块以指向manage.py

     option_settings: "aws:elasticbeanstalk:container:python": WSGIPath: manage.py "aws:elasticbeanstalk:container:python:staticfiles": "/static/": "application/static/" 

这让Elastic Beanstalk正确地找到了可调用的应用程序。

这在官方文档中进行简要描述,并在本博文中有更详细的描述

编辑 - 参见下面的项目结构

  • ProjectRoot
    • .ebextensions
      • application.config
    • 应用
      • 主要
        • forms.py
        • views.py
    • 静态的
    • 模板
    • 测试
    • manage.py
    • requirements.txt
    • config.py
    • 等等

从awsebcli 3.0开始,您实际上可以通过eb config编辑配置设置以表示您的WSGI路径。 然后, config命令将根据您当前的配置设置拉(并在默认的命令行文本编辑器中打开它,即nano)一个可编辑的配置。 然后,您将搜索WSGI并以此方式更新它的路径。 保存文件并退出后,您的WSGI路径将自动更新。

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

出现此错误是因为默认情况下,Beanstalk会查找application.py。 检查Beanstalk Web UI, Configuration > Software ConfigurationWSGIPath映射到application.py

WSGIPath默认设置为application.py。设置为manage.py。

如前面的回复中所示更新WSGIPath或重命名为application.py文件。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM