使用此处列出的步骤成功部署测试应用后: 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
包含我的网址映射。
我已尝试在根目录以及eb
模块和myApp
中初始化git aws.push
实例,但我在AWS信息中心上收到以下错误:
ERROR Your WSGIPath refers to a file that does not exist.
并且应用程序不起作用(任何路径为404)。
如何将上述Flask
应用程序部署到弹性beanstalk?
答案 0 :(得分:11)
将以下内容添加到.ebextensions/<env-name>.config
:
option_settings:
"aws:elasticbeanstalk:container:python":
WSGIPath: myApp/handlers/views.py
<强>更新强>
如果您没有.ebextensions目录,请为项目创建一个。您可以在Customizing and Configuring AWS Elastic Beanstalk Environments指南中找到有关容器配置的更多信息。
答案 1 :(得分:11)
我遇到了类似的问题,将Flask应用程序部署到EB,具有类似的目录结构,并且必须做两件事:
更新我的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)
创建.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
进行了详细介绍编辑 - 请参阅下面的项目结构
答案 2 :(得分:5)
从awsebcli 3.0开始,您实际上可以通过WSGI
修改配置设置以代表eb config
路径。然后config
命令将根据您当前的配置设置拉出(并在默认的命令行文本编辑器中打开它,即nano)一个可编辑的配置。然后,您将搜索WSGI
并以此方式更新其路径。保存文件并退出后,您的WSGI
路径将自动更新。
答案 3 :(得分:4)
您的WSGIPath是指不存在的文件。
出现此错误是因为默认情况下,Beanstalk会查找application.py。在Beanstalk网页用户界面检查,Configuration > Software Configuration
,WSGIPath
已映射到application.py
更新WSGIPath
,如之前的回复所示,或重命名为application.py
文件。
答案 4 :(得分:1)
WSGI配置对我来说很痛苦。我确实使用 //$scope.selectedDevices = [];
vm.selectedDevices = [];
//$scope.selected = function(device) {
vm.selected = function(device) {
if (device.checked) {
//$scope.selectedDevices.push(device);
vm.selectedDevices.push(device);
}
//........
命令更改了WSCI设置,但它没有用。您可以通过以下5个简单步骤解决此问题。
1-将eb config
函数移动到目录的根目录(我运行app.py
命令的位置。
2-同时将eb init
重命名为app.py
,并将该已启动的应用程序重命名为application.py
而不是application = Flask(__name__)
3- app = Flask(__name__)
在此之后没有工作(在同一个项目中)我尝试使用eb deploy
来修复配置,但它太毛茸茸而无法解决它。从项目中删除所有.extensions,.gitignore等。
4-使用eb config
在EB上初始化您的项目并按照提示操作。部署完成后,eb init
将启动您的webapp(希望!)
答案 5 :(得分:1)
当我遇到这个问题时,那是因为我使用GUI来上传我的项目文件的zip。最初我正在压缩项目级目录并将该zip文件上传到EB。
然后我切换到简单地上传项目文件的拉链 - 即选择所有文件并将其发送到zip - 然后GUI上传实用程序能够找到我的application.py文件,因为应用程序没有问题。 py文件不在子文件夹中。
答案 6 :(得分:0)
嗯,就我而言,我遵循了整个过程和约定,但仍然得到404。问题是我的虚拟环境。我忽略了.gitignore中所有与环境配置相关的文件夹/文件,但没有忽略.ebignore中的所有文件。 创建.ebignore并忽略与项目代码无关的所有文件夹/文件后,解决了该问题。