2013-12-13 86 views
6

在成功部署使用这里列出的步骤的测试程序: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_Python_flask.html如何在AWS弹性魔豆部署结构化瓶应用

我试图部署我它具有以下结构实际烧瓶应用:

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.pusheb实例,但我得到以下错误的AWS控制台: ERROR Your WSGIPath refers to a file that does not exist.和应用程序没有(任何路径404)工作。

如何将以上Flask应用程序部署到弹性豆茎?

回答

9

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

option_settings: 
    "aws:elasticbeanstalk:container:python": 
    WSGIPath: myApp/handlers/views.py 

更新:

如果你没有.ebextensions目录,请创建一个用于该项目。您可以在Customizing and Configuring AWS Elastic Beanstalk Environments指南中找到关于容器配置的更多信息。

+0

我好像还没有一个。ebextensions目录;我是不是该?我尝试更新.elasticbeanstalk/optionsettings.myApp.config文件,更改WSGIPath = ...行,两个配置文件之间有区别吗? – alh

+0

.elasticbeanstalk包含eb工具本身的元数据,最好不要篡改它。如果您没有.ebextensions目录,请创建一个并在其中添加配置文件。在答案中我应该更加详尽。 – kukido

+1

这实际上已经过时,因为awsebcli 3.0。我添加了一个答案,详细说明如何完成它。 – davetw12

6

我遇到类似的问题,部署瓶应用EB,具有类似的目录结构,并不得不做两件事情:

  1. 更新我的manage.py创建名称申请的对象,而不是应用

    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找到可正确调用的应用程序。

这在the official docs简要描述,并更详细地in this blog post

EDIT被描述 - 参见项目结构下方

  • ProjectRoot
    • .ebextensions
      • 应用的.config
    • 应用
        • 形式。PY
        • views.py
    • 静态
    • 模板
    • 测试
    • manage.py
    • requirements.txt
    • config.py
    • 等,等
+0

救命恩,谢谢:) –

5

由于awsebcli 3.0的,你其实可以编辑自己的配置设置,通过eb config代表你WSGI路径。然后config命令将拉(在默认的命令行的文本编辑器打开它,即纳米),根据您当前的配置设置可编辑的配置。然后,您将搜索WSGI并以此方式更新路径。保存文件并退出后,您的WSGI路径将自动更新。

+1

您在上面的评论中说过旧的.config方式已过时;但所有的文件仍然把这作为改变环境的标准方式。实际上,在我的情况下,WSGIPath似乎是由我使用的已保存配置设置的,但它在我使用'eb config'时看到的本地文件中完全不出现。 – Kylotan

+0

@Kylotan我的意思是eb config应该让你直接访问AWS服务器上的配置文件。该命令实际上并不在本地保存一个。我的错误,因为我错误地说,它会拉动文件。 – davetw12

+1

'eb config get​​'将下载该保存配置的配置文件。它没有提到那里的WSGIPath。但它在某种程度上会覆盖或知道在使用这些保存的配置时忽略.ebextensions/*。config文件中的内容。 – Kylotan

1

WSGI配置是痛苦的我。我确实使用eb config命令更改了WSCI设置,但它不起作用。下面你可以通过5个简单的步骤解决这个问题

1-移至app.py功能到目录的根目录(其中I拼命地跑eb init命令。

2-此外更名app.pyapplication.py并且在initilized应用程序作为application = Flask(__name__)app = Flask(__name__)

3- eb deploy没在此之后没有工作(在同一个项目中)我尝试使用eb config来修复配置,但它太多了,以至于无法将其整理出来。删除您的项目中的所有.extensions,.gitignore等。

4-重新在EB上初始化您的项目eb init并按照提示进行操作。当部署完成时,eb open将启动您的webapp(希望!)

1

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

出现此错误是因为Beanstalk默认查找application.py。检查魔豆的web用户界面,Configuration > Software Configuration,如在之前的回复或创建application.py文件WSGIPath映射到application.py

WSGIPath is set by default to application.py. Set to manage.py.

更新WSGIPath

0

当我遇到这个问题,是因为我使用GUI上传我的项目文件的zip。最初我正在上传项目目录的zip文件,并得到了这个错误。

然后我切换到只需上传项目的ZIP文件本身,即选择所有文件,并把这些到拉链,然后在GUI上载应用程序能够找到我的application.py文件没有问题。