Das Problem besteht darin, dass ein gegabelter Prozess einige der Ressourcen seines übergeordneten Prozesses erbt, beispielsweise seine Dateideskriptoren. Eine solche gemeinsam genutzte Ressource ist insbesondere die MySQL-Verbindung. Wenn der untergeordnete Prozess seine E-Mail-Versendung beendet und sich beendet, schließt er die MySQL-Verbindung, wodurch die Verbindung des übergeordneten Prozesses geschlossen wird.
Wenn Sie diesen Weg weitergehen (und er ist voller ähnlicher Feinheiten), dann müssen Sie etwa so vorgehen:
# Clear existing connections before forking to ensure they do not get inherited.
::ActiveRecord::Base.clear_all_connections!
fork do
# Establish a new connection for each fork.
::ActiveRecord::Base.establish_connection
# The rest of the code for each fork...
end
Ähnliches müssen Sie mit Diensten wie memcached oder mongodb tun, wenn Sie diese verwenden.