Сервисы
Мой сервис основан на флешке + postgresql + gunicorn + supervisor + nginx
При развертывании через docker, после запуска сервиса, затем доступа к API, иногда он сообщал об ошибкеи иногда это работает хорошо.
И база данных sqlachemy connect добавляет параметры 'sslmode:disable'
.
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/sql/elements.py", line 287, in _execute_on_connection
Return connection._execute_clauseelement(self, multiparams, params)
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1107, in _execute_clauseelement
Distilled_params,
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1248, in _execute_context
e, statement, parameters, cursor, context
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1466, in _handle_dbapi_exception
Util.raise_from_cause(sqlalchemy_exception, exc_info)
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 383, in raise_from_cause
Reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1244, in _execute_context
Cursor, statement, parameters, context
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 552, in do_execute
Cursor.execute(statement, parameters)
OperationalError: (psycopg2.OperationalError) server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Информация
Docker для Mac: версия: 2.0.0.3(31259)
macOS: версия 10.14.2
Python: версия 2.7.15
Метод повторения
При просмотре информации о порте по команде
lsof -i:5432
порт 5432 является портом базы данных postgresql по умолчанию ,, если outputconsole был
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
postgres 86469 user 4u IPv6 0xxddd 0t0 TCP *:postgresql (LISTEN)
postgres 86469 user 5u IPv4 0xxddr 0t0 TCP *:postgresql (LISTEN)
, он отображал бы сообщение об ошибке:
OperationalError: (psycopg2.OperationalError) server closed the connection unexpectedly
, но если outputconsolelog показывает это:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
com.docke 62421 user 26u IPv4 0xe93 0t0 TCP 192.168.2.7:6435->192.168.2.7:postgresql (ESTABLISHED)
postgres 86460 user 4u IPv6 0xed3 0t0 TCP *:postgresql (LISTEN)
postgres 86460 user 5u IPv4 0xe513 0t0 TCP *:postgresql (LISTEN)
postgres 86856 user 11u IPv4 0xfe93 0t0 TCP 192.168.2.7:postgresql->192.168.2.7:6435 (ESTABLISHED)
ситуация, API будет работать хорошо.
Becauce из Docker для Mac?
Ссылка ссылка https://github.com/docker/for-mac/issues/2442, проблема не можетрешить мою проблему.
Заметили похожую проблему?
ink Python & Sqlalchemy - Схема подключения -> Случайно отключается от удаленного сервера
и эта проблема не может решить мою проблему.
Решение
flask_sqlachemy нужен параметр pool_pre_ping
from flask_sqlalchemy import SQLAlchemy as _BaseSQLAlchemy
class SQLAlchemy(_BaseSQLAlchemy):
def apply_pool_defaults(self, app, options):
super(SQLAlchemy, self).apply_pool_defaults(self, app, options)
options["pool_pre_ping"] = True
db = SQLAlchemy()