当前位置: 首页 > 面试题库 >

uWSGI,Flask,sqlalchemy和Postgres:SSL错误:解密失败或记录Mac错误

锺离卓
2023-03-14
问题内容

我正在尝试使用uWSGI + Nginx设置应用程序Web服务器,该服务器使用SQLAlchemy运行Flask应用程序以与Postgres数据库进行通信。

当我向Web服务器发出请求时,其他所有响应都会是500错误。

错误是:

Traceback (most recent call last):
  File "/var/env/argos/lib/python3.3/site-packages/sqlalchemy/engine/base.py", line 867, in _execute_context
    context)
  File "/var/env/argos/lib/python3.3/site-packages/sqlalchemy/engine/default.py", line 388, in do_execute
    cursor.execute(statement, parameters)
psycopg2.OperationalError: SSL error: decryption failed or bad record mac


The above exception was the direct cause of the following exception:

sqlalchemy.exc.OperationalError: (OperationalError) SSL error: decryption failed or bad record mac

该错误是通过一种简单的Flask-SQLAlchemy方法触发的:

result = models.Event.query.get(id)

uwsgi由进行管理supervisor,该服务器具有一个配置:

[program:my_app]
command=/usr/bin/uwsgi --ini /etc/uwsgi/apps-enabled/myapp.ini --catch-exceptions
directory=/path/to/my/app
stopsignal=QUIT
autostart=true
autorestart=true

uwsgi的配置如下所示:

[uwsgi]
socket = /tmp/my_app.sock
logto = /var/log/my_app.log
plugins = python3
virtualenv =  /path/to/my/venv
pythonpath = /path/to/my/app
wsgi-file = /path/to/my/app/application.py
callable = app
max-requests = 1000
chmod-socket = 666
chown-socket = www-data:www-data
master = true
processes = 2
no-orphans = true
log-date = true
uid = www-data
gid = www-data

我能得到的最远的地方是它与uwsgi的分支有关。但是除此之外,我不清楚需要做什么。


问题答案:

问题最终是uwsgi的分叉。

当使用主进程处理多个进程时,uwsgi会在主进程中初始化应用程序,然后将应用程序复制到每个工作进程中。问题是,如果在初始化应用程序时打开数据库连接,则有多个进程共享同一连接,这将导致上述错误。

解决方案是lazy 为uwsgi设置配置选项,这将在每个过程中强制完全加载应用程序:

lazy

设置惰性模式(将应用程序加载到工作程序中而不是在主服务器中)。

由于无法使用写时复制语义,因此该选项可能会影响内存使用。启用惰性后,uWSGI的重载信号将只重载工作程序;主人会活着。这样,uWSGI配置更改不会在主服务器重新加载时进行。

还有一个lazy-apps选项:

lazy-apps

在每个工作程序而不是主服务器中加载应用程序。

由于无法使用写时复制语义,因此该选项可能会影响内存使用。与惰性不同,这仅影响应用程序的加载方式,而不影响主服务器在重新加载时的行为。

这个uwsgi配置最终为我工作:

[uwsgi]
socket = /tmp/my_app.sock
logto = /var/log/my_app.log
plugins = python3
virtualenv =  /path/to/my/venv
pythonpath = /path/to/my/app
wsgi-file = /path/to/my/app/application.py
callable = app
max-requests = 1000
chmod-socket = 666
chown-socket = www-data:www-data
master = true
processes = 2
no-orphans = true
log-date = true
uid = www-data
gid = www-data

# the fix
lazy = true
lazy-apps = true


 类似资料:
  • 问题内容: 我有这样的代码和方法,并在此所有其他方法作品和我都找过我所能,该方法适用于这也是 但这给了我 到处都是的错误,我找不到任何解决方案。 问题答案: 从你的问题… 我认为这是你感到困惑的地方。“查询”是指SQLAlchemy 对象。是指对象,它是的子类。此子类包括诸如和的帮助器。但是,这意味着Query对象不具有该功能。实际构建对象的方式称为“查询”对象,这取决于你处理的是还是对象。 在此

  • 问题内容: 这已经让我发疯了几天。我使用SSL引擎使用java nio和ssl加密创建了一个客户端。握手可以正常工作,我向网站写入GET请求,并且工作正常(我获得了包含200个代码的标头)。问题是,当网站将数据包发回时,在第二个数据包上,我收到BadPaddingException。这是我的读取方法: 我的获取请求很简单,例如:“获取\ r \ n主机:www.google.com \ r \ n

  • 我有一个全新的Linux Mint14安装。已安装Thunderbird&Enigmail。 我试着删除我的密钥并重新移植它。我试着改变各种设置。但我想不出问题出在哪里。我以前使用过Linux/Thunderbird/Enigmail,从来没有出现过这个错误。

  • 问题内容: 我是flask和sqlalchemy的新手,我只是开始在flask应用程序上工作,现在我正在使用sqlalchemy。我想知道使用flask-sqlalchemy与sqlalchemy是否可以获得任何显着的好处。 问题答案: 主要功能是与Flask应用程序正确集成-它创建并配置引擎,连接和会话,并将其配置为与Flask应用程序一起使用。 此设置非常复杂,因为我们需要创建作用域会话并根据

  • 你能帮我解决这个错误吗? 2017-08-05 18:54:18,421 INFOsqlalchemy.engine.base.Engine(4L,)2017-08-05 18:54:18,424 INFOsqlalchemy.engine.base.Engine COMMIT127.0.0.1--[05/Aug/2017 18:54:18]"GET/HTTP/1.1"200-127.0.0.1

  • 本章讨论Laravel项目中的错误和日志记录以及如何处理它们。 Errors 正在进行的项目承担一些错误。 启动新的Laravel项目时,已经为您配置了错误和异常处理。 通常,在本地环境中,我们需要查看错误以进行调试。 我们需要在生产环境中隐藏用户的这些错误。 这可以通过存储在应用程序根目录的环境文件.env设置的变量APP_DEBUG来实现。 对于本地环境, APP_DEBUG的值应为true但