PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

uWSGI, Flask, sqlalchemy e postgres:errore SSL:decrittografia non riuscita o registrazione errata mac

Il problema è finito per essere il fork di uwsgi.

Quando si lavora con più processi con un processo master, uwsgi inizializza l'applicazione nel processo master e quindi copia l'applicazione in ogni processo di lavoro. Il problema è che se apri una connessione al database durante l'inizializzazione dell'applicazione, hai più processi che condividono la stessa connessione, il che causa l'errore sopra.

La soluzione è impostare il lazy opzione di configurazione per uwsgi, che forza un caricamento completo dell'applicazione in ogni processo:

lazy

Imposta la modalità pigra (carica le app in worker anziché in master).

Questa opzione potrebbe avere implicazioni sull'utilizzo della memoria poiché la semantica Copy-on-Write non può essere utilizzata. Quando lazy è abilitato, solo i lavoratori verranno ricaricati dai segnali di ricarica di uWSGI; il maestro rimarrà in vita. Pertanto, le modifiche alla configurazione di uWSGI non vengono rilevate durante il ricaricamento dal master.

C'è anche un lazy-apps opzione:

lazy-apps

Carica le app in ogni lavoratore anziché nel master.

Questa opzione potrebbe avere implicazioni sull'utilizzo della memoria poiché la semantica Copy-on-Write non può essere utilizzata. A differenza del pigro, questo influisce solo sul modo in cui vengono caricate le applicazioni, non sul comportamento del master al ricaricamento.

Questa configurazione di uwsgi ha finito per funzionare per me:

[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