PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

uWSGI, Flask, sqlalchemy i postgres:błąd SSL:odszyfrowanie nie powiodło się lub zły rekord mac

Problem okazał się rozwidleniem uwsgi.

Podczas pracy z wieloma procesami z procesem głównym, uwsgi inicjuje aplikację w procesie głównym, a następnie kopiuje aplikację do każdego procesu roboczego. Problem polega na tym, że jeśli otworzysz połączenie z bazą danych podczas inicjowania aplikacji, wtedy wiele procesów współdzieli to samo połączenie, co powoduje powyższy błąd.

Rozwiązaniem jest ustawienie lazy opcja konfiguracji dla uwsgi, która wymusza pełne ładowanie aplikacji w każdym procesie:

lazy

Ustaw tryb leniwy (ładuj aplikacje do pracowników zamiast do głównego).

Ta opcja może mieć wpływ na użycie pamięci, ponieważ nie można użyć semantyki kopiowania przy zapisie. Gdy opcja lenistwa jest włączona, tylko pracownicy będą przeładowywani przez sygnały przeładowania uWSGI; mistrz pozostanie przy życiu. W związku z tym zmiany w konfiguracji uWSGI nie są pobierane po ponownym załadowaniu przez mastera.

Jest też lazy-apps opcja:

lazy-apps

Załaduj aplikacje do każdego pracownika zamiast do głównego.

Ta opcja może mieć wpływ na użycie pamięci, ponieważ nie można użyć semantyki kopiowania przy zapisie. W przeciwieństwie do lenistwa, ma to wpływ tylko na sposób ładowania aplikacji, a nie na zachowanie mastera po ponownym załadowaniu.

Ta konfiguracja uwsgi zakończyła się dla mnie pracą:

[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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja Escape dla wyrażeń regularnych lub wzorców LIKE

  2. Jak skonfigurować replikację klastrów do klastrów dla PostgreSQL

  3. Dla początkujących, czy jest duża różnica między MySQL a PostgreSQL?

  4. Utwórz rolę PostgreSQL (użytkownika), jeśli nie istnieje

  5. Uzyskaj wyraźną sumę połączonej kolumny tabeli