Ich habe eine Rake-Task in einem Rails 4.2-Projekt, das fork
verwendet. Mein Problem ist, dass nach dem gegabelten Prozess (dh nach Process.wait
) beendet hat, ich die folgenden Postgres-Fehler, wenn ich versuche, wieder auf die Datenbank zuzugreifen:Was bewirkt, dass ActiveRecord die Postgres-Verbindung nach dem Forking unterbricht?
PG::ConnectionBad: PQconsumeInput() server closed the connection unexpectedly
Zuerst habe ich Active Verdacht automatisch die Verbindung zu schließen, sobald die gegabelten Prozess endet. Aber nach dem Code AR des connection_pool.rb
Lesen scheint es, dass gegabelt Prozesse ihre eigenen Verbindungen nutzen sollten:
Eine Verbindung wurde in einem Vorfahren Prozess etabliert, die anschließend gegabelt haben muss. Wir können die Verbindung nicht wiederverwenden, aber wir können die Spezifikation kopieren und eine neue Verbindung damit aufbauen.
(von ActiveRecord::ConnectionAdapters::ConnectionHandler#pool_for_owner
)
Trotzdem Forking rendert die Verbindung nutzlos.
Ich versuchte, den gegabelten Prozess der Zugriff auf die Datenbank überhaupt und überprüft zu verhindern, dass die alten Verbindungen nicht mit dem folgenden Code nach Forking wiederverwendet werden:
ActiveRecord::Base.default_connection_handler = nil
ActiveRecord::Base.connection_handler = nil
Vorschläge, wie dieses Problem zu lösen?
vielleicht hilft die Antwort hier? http://stackoverflow.com/questions/13089875/fork-ruby-activecord-and-file-descriptors-on-fork – margold