2016-07-31 23 views
1

Ich habe Hanami Check-out und entdecken, dass meine Sequel-Verbindungen mit dem folgenden Fehler sterben wurden:Sequel löscht Verbindungen mit SSL-Fehler beim Verzweigen, warum?

Sequel::DatabaseDisconnectError: PG::ConnectionBad: PQconsumeInput() SSL error: decryption failed or bad record mac: SELECT NULL

Egal, der Server (dünner, Puma, webrick) oder Umwelt. Nach einigen Experimenten stellte sich heraus, dass der Schuldige gem 'shotgun' in der Gemfile war (Hanami lädt den Code nicht neu). Von der Schrotflinte docs:

Each time a request is received, it forks, loads the application in the child process, processes the request, and exits the child process.

Wenn in der Produktion mit nginx verwendet, gegabelten Sequel fällt Verbindungen aus dem gleichen Grund.

Dies kann mit dem folgenden Code gelindert werden, aber es wird bedeuten, dass man bei jeder Anfrage wieder angeschlossen hat: es scheint

SequelDB.extension :connection_validator 
SequelDB.pool.connection_validation_timeout = -1 

Damit Sequel des Verbindungspool nach Forking beschädigt ist.

Warum macht Sequel das?

Antwort

1

Wenn ein Prozess sich verzweigt, teilt jede Kopie des Prozesses den Dateideskriptor, der für die Kommunikation mit Postgres verwendet wurde. Dies ist nicht sequelspezifisch oder gar Postgres-spezifisch, obwohl einige Bibliotheken Forking erkennen und die Verbindung zur db wieder herstellen (siehe discussion auf dem Sequel Issue Tracker - kurze Version ist, dass es mit der Fortsetzung nicht passieren wird)