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

alh*_*alh 12 python amazon-web-services flask amazon-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
Run Code Online (Sandbox Code Playgroud)

哪里views.py包含我的网址映射.

我已尝试eb在根目录和myApp模块内初始化实例,git aws.push但我在AWS仪表板上收到以下错误: ERROR Your WSGIPath refers to a file that does not exist.应用程序不起作用(任何路径为404).

如何将上述Flask应用程序部署到弹性beanstalk?

kuk*_*ido 11

将以下内容添加到.ebextensions/<env-name>.config:

option_settings:
  "aws:elasticbeanstalk:container:python":
    WSGIPath: myApp/handlers/views.py
Run Code Online (Sandbox Code Playgroud)

更新:

如果您没有.ebextensions目录,请为项目创建一个.您可以在" 自定义和配置AWS Elastic Beanstalk环境"指南中找到有关容器配置的更多信息.


Wil*_*l B 11

我遇到了类似的问题,将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)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建.ebextensions/myapp.config并定义以下块以指向manage.py

    option_settings:
      "aws:elasticbeanstalk:container:python":
        WSGIPath: manage.py
      "aws:elasticbeanstalk:container:python:staticfiles":
        "/static/": "application/static/" 
    
    Run Code Online (Sandbox Code Playgroud)

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

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

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

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


Tir*_*a R 7

您的 WSGIPath 引用了一个不存在的文件。

出现此错误是因为 Beanstalk 默认查找 application.py。检查在魔豆web用户界面,Configuration > Software ConfigurationWSGIPath被映射到application.py

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

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


dav*_*w12 5

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

  • 你在上面的评论中说过旧的.config方式已经过时了; 但所有文档仍然将其作为改变环境的标准方法.事实上,在我的情况下,WSGIPath似乎是由我使用的保存配置设置的,但它在我使用`eb config`时看到的本地文件中根本没有出现. (2认同)