如何使用弹性beantalk和AWS修复Flask应用程序中的内部服务器错误

时间:2019-02-12 00:32:07

标签: amazon-web-services flask amazon-elastic-beanstalk

当我在本地运行Flask应用程序时,可以很好地连接到MySQL RDS。但是,当我尝试使用Elastic Beanstalk部署应用程序时,出现“ 500 Internal Server Error”。 我不知道这是否有帮助,但是当我使用本地sqlite文件时,我的应用程序在本地运行以及与Elastic Beanstalk一起部署时均按预期工作。

我确实尝试过与该页面一起工作,但是在包含环境属性时,我没有发现任何差异。 https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-rds.html#python-rds-create

这是我的__init__.py文件。我只是注释掉我不想在测试时使用的任何数据库URI。

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_bcrypt import Bcrypt
from flask_login import LoginManager

application = Flask(__name__)
application.config['SECRET_KEY'] = 'c4633b5a978d282104dbc44c32c9486'
application.config['SQLALCHEMY_DATABASE_URI'] =  
'mysql+pymysql://<username>:<password>@garbagero.cuz5hqf0nh5m.us-east- 
2.rds.amazonaws.com/ebdb'
#application.config['SQLALCHEMY_DATABASE_URI'] =  'sqlite:///site.db'
db = SQLAlchemy(application)
bcrypt = Bcrypt(application)
login_manager = LoginManager(application)
login_manager.login_view = 'login'
login_manager.login_message_category = 'info'

from garbageRO import routes

编辑:我终于发现我不小心将1个程序包从我的requirements.txt文件中删除了。我以为我已经在发布之前仔细检查了这个,但是显然我没有。

1 个答案:

答案 0 :(得分:0)

我确实建议您使用Flask和SQLAlchemy的详细模式调试应用程序,以便您可以更好地了解发生了什么,在此级别或详细信息下,我只能建议要检查的内容,例如AWS上的权限/ IAM,以检查您的ElasticBeanstalk是否真的可以访问RDS,假设ELB /应用程序使用一组凭据,并且您在本地使用其他凭据进行了测试,对吗?

关于“详细模式”,请尝试将SQLALCHEMY_ECHO设置为True:http://flask-sqlalchemy.pocoo.org/2.3/config/ 此选项也未经测试:https://github.com/pallets/flask-sqlalchemy/pull/208/files?short_path=fd40cf2

在Flask应用中,您还可以将debug设置为True。

另一种选择是调试是否可以直接在RDS上与计算机/容器上的客户端连接,或者至少在telnet正常工作的情况下进行调试。