部署在 Elastic Beanstalk 上的 Python Flask 服务器出现 AWS 内部服务错误,日志说 SECRET_KEY 从未设置?

Posted

技术标签:

【中文标题】部署在 Elastic Beanstalk 上的 Python Flask 服务器出现 AWS 内部服务错误,日志说 SECRET_KEY 从未设置?【英文标题】:Python Flask server deployed on Elastic Beanstalk with AWS Internal Service Error, Logs say SECRET_KEY was never set? 【发布时间】:2020-10-28 07:17:03 【问题描述】:

我正在尝试使用弹性 beanstalk 将我的烧瓶应用程序部署到 AWS。我的应用程序在 localhost 上完美运行,但我的应用程序在部署时遇到了问题。我不断收到内部服务错误,当我检查 AWS 上的日志时,他们一直说我的 secret_key 从未设置过。以下是来自 AWS 的日志:

7 月 7 日 05:25:03 ip-172-31-10-200 网络:文件 "/var/app/venv/staging-LQM1lest/lib/python3.7/site-packages/flask/app.py", 第 1821 行,在 handle_user_exception 7 月 7 日 05:25:03 ip-172-31-10-200 网络:重新筹集(exc_type,exc_value,tb)7 月 7 日 05:25:03 ip-172-31-10-200 网络:文件 "/var/app/venv/staging-LQM1lest/lib/python3.7/site-packages/flask/_compat.py", 第 39 行,在 7 月 7 日 05:25:03 重新加注 ip-172-31-10-200 网络:提高价值 7 月 7 日 05:25:03 ip-172-31-10-200 网络:文件 "/var/app/venv/staging-LQM1lest/lib/python3.7/site-packages/flask/app.py", 第 1950 行,在 full_dispatch_request 7 月 7 日 05:25:03 ip-172-31-10-200 网站: rv = self.dispatch_request() 7 月 7 日 05:25:03 ip-172-31-10-200 网络:文件 "/var/app/venv/staging-LQM1lest/lib/python3.7/site-packages/flask/app.py", 第 1936 行,在 dispatch_request 7 月 7 日 05:25:03 ip-172-31-10-200 网络中: 返回 self.view_functionsrule.endpoint 七月 7 05:25:03 ip-172-31-10-200 web: 文件 "/var/app/current/application.py", 第 94 行,在 submit_temperature Jul 7 05:25:03 ip-172-31-10-200 网络: flash('分数生成成功!') Jul 7 05:25:03 ip-172-31-10-200 网络:文件 "/var/app/venv/staging-LQM1lest/lib/python3.7/site-packages/flask/helpers.py", 第 423 行,闪现 7 月 7 日 05:25:03 ip-172-31-10-200 网络: session["_flashes"] = flashes Jul 7 05:25:03 ip-172-31-10-200 web: 文件 "/var/app/venv/staging-LQM1lest/lib/python3.7/site-packages/werkzeug/local.py", 第 350 行,在 setitem Jul 7 05:25:03 ip-172-31-10-200 web: self._get_current_object()[key] = value Jul 7 05:25:03 ip-172-31-10-200 网络:文件 "/var/app/venv/staging-LQM1lest/lib/python3.7/site-packages/flask/sessions.py", 第 103 行,_fail Jul 7 05:25:03 ip-172-31-10-200 web:“会话 不可用,因为没有秘密” 7 月 7 日 05:25:03 ip-172-31-10-200 web:RuntimeError:会话不可用,因为没有密钥 已设置。将应用程序上的 secret_key 设置为唯一的 和秘密。

我研究了为什么它可以在本地主机上运行而不是在生产环境中运行,之前我将 application.secret_key 设置在“if name == 'ma​​in':" 块,以及 Elastic Beanstalk 运行我的应用程序的方式,它会跳过该块。我的目录结构如下:

application/
    __init__.py
static/
templates/
application.py
dbhelpers.py
rankgraph.py
scoring_algorithm.py
config.py

我更改了设置密钥的位置,并尝试了两种不同的方法。这是我设置密钥的地方。

from tinydb import TinyDB
from flask import Flask, render_template, redirect, url_for, request, flash, make_response, session
import os, time, dbhelpers, rankgraph, scoring_algorithm, config

application = app = Flask(__name__)
application.debug = True
application.secret_key = 'asfwoewb09bew'
print(application.config)
db = TinyDB('db.json')

我也在这里设置它,因为第一种方法仍然对我不起作用,这是我的 init.py。

from flask import Flask


application = Flask(__name__)
application.config.from_object('config') 

这是我的 config.py

SECRET_KEY = 'dsaf0897sfdg45sfdgfdsaqzdf98sdf0a'

如果我没有提供足够的信息,这里还有指向存储库的链接。 https://github.com/human37/swmac_flask_project

【问题讨论】:

您确定要部署新版本吗?也许您在没有密钥的情况下继续以某种方式部署旧版本? 我找到了答案!解决方案是改用 Microsoft azure,我用它们部署了完全相同的 Web 应用程序,并且问题为零。仍然对为什么它从未在弹性豆茎上起作用感到困惑。 感谢您告诉我。很高兴它成功了。如果您不介意我可以根据您的评论提供答案,或者您可以根据需要回答您自己的问题? 随时提供答案。感谢您的帮助。 【参考方案1】:

基于 cmets。

问题的原因尚未确定。

但是,解决方案是在Microsoft Azure上部署相同的应用程序时发现的。

【讨论】:

以上是关于部署在 Elastic Beanstalk 上的 Python Flask 服务器出现 AWS 内部服务错误,日志说 SECRET_KEY 从未设置?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows Server 上的 Elastic Beanstalk 部署中正确使用 AWS Secrets Manager

将 MongoDB 与部署在 Elastic Beanstalk 上的 NodeJS 应用程序一起使用的推荐方法是啥?

AWS Elastic Beanstalk 上的流明 - .env

Elastic Beanstalk 上的 Docker + Django

如何为 ruby​​ 2.7.1 解决 AWS Elastic Beanstalk 上的 Rail 6 部署错误

Elastic Beanstalk 上的 WebSockets 与 Docker