Как исправить внутреннюю ошибку сервера в приложении Flask, используя эластичный beanstalk и aws - PullRequest
0 голосов
/ 12 февраля 2019

Когда я запускаю приложение фляги локально, я могу нормально подключиться к 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 пакет из моего файла needs.txt.Я думал, что уже дважды проверил это перед публикацией, но, видимо, я не сделал.

1 Ответ

0 голосов
/ 12 февраля 2019

Я рекомендую вам отладить ваше приложение, используя подробный режим Flask и SQLAlchemy, чтобы вы могли лучше знать, что происходит, с этим уровнем или подробностями я могу только предложить что-то проверить, например, разрешения / IAM на AWS, чтобыпроверьте, может ли ваш ElasticBeanstalk действительно получить доступ к RDS, предполагая, что ELB / applcation использует набор учетных данных, и вы проверили локально с другими учетными данными, верно?

Насчет "подробного режима", попробуйте установить SQLALCHEMY_ECHO вTrue: http://flask -sqlalchemy.pocoo.org / 2.3 / config / Также есть эта опция, которую я не проверял: https://github.com/pallets/flask-sqlalchemy/pull/208/files?short_path=fd40cf2

А в приложении Flask вы можете установить для отладки значение Trueтакже.

Другой вариант - отладка, если вы можете подключиться к RDS напрямую с клиентом на машине / контейнере или, по крайней мере, если работает telnet.

...