2013-12-13 120 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文件沒有問題。