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

Posted

技术标签:

【中文标题】如何使用弹性 beantalk 和 aws 修复 Flask 应用程序中的内部服务器错误【英文标题】:How to fix internal server error in Flask application using elastic beanstalk and aws 【发布时间】:2019-07-05 13:44:07 【问题描述】:

当我在本地运行我的烧瓶应用程序时,我可以很好地连接到 mysql RDS。但是,当我尝试使用 Elastic Beanstalk 部署应用程序时,我收到“500 内部服务器错误”。 我不知道这是否有帮助,但是当我使用本地 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

编辑:我终于发现我不小心在我的 requirements.txt 文件中留下了 1 个包。我以为我在发帖之前已经仔细检查过,但显然我没有。

【问题讨论】:

【参考方案1】:

我确实建议您使用 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 工作时进行调试。

【讨论】:

您能否提供有关 Elastic Beanstalk 凭证/权限的说明?如果我使用其他凭据在本地进行测试,我不确定如何回答 我尝试将 SQLALCHEMY_ECHO 设置为 true,但没有看到任何额外信息。在弹性 beantalk 上部署时,我仍然得到相同的内部服务器错误页面 通常,一些系统管理员会在 ElasticBeanstalk 和 RDS 或其他 AWS 服务之间配置所需的权限/访问,这就是我所说的那种权限。对不起,但我不知道这个细节来更好地向你解释。我们的系统管理员为我们处理这个问题。也许SQLALCHEMY_ECHO 没有工作,因为您使用的日志记录配置/级别,您的日志记录设置如何?

以上是关于如何使用弹性 beantalk 和 aws 修复 Flask 应用程序中的内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章

开发环境和AWS弹性beantalk

如何在 AWS EC2 弹性 beantalk 中使用命令

如何将 wordpress 博客迁移到 AWS 弹性 beantalk

aws弹性beantalk上的nginx扩展

如何修复弹性beantalk实例上的“使用这些代码失败的健康检查:”?

在 AWS 弹性 beantalk 上部署 Flask 应用程序