Docs Menu
Docs Home
/ /

Configuración de Forking servidor

En esta guía, puedes aprender a configurar tu aplicación para utilizar un servidor web con bifurcaciones.

Al utilizar Mongoid con un servidor web bifurcado, siga las siguientes pautas:

  • Si es posible, no realice ninguna operación MongoDB en el proceso padre antes de la bifurcación.

  • Puede evitar errores de conexión como Mongo::Error::SocketError y Mongo::Error::NoServerAvailable realizando las siguientes acciones:

    1. Desconecte los clientes MongoDB del proceso Ruby padre inmediatamente antes de la bifurcación mediante el Mongoid.disconnect_clients método. Esto garantiza que los procesos padre e hijo no reutilicen accidentalmente los mismos sockets ni generen conflictos de E/S. Mongoid.disconnect_clients no interrumpe ninguna operación MongoDB en curso y se reconecta automáticamente al realizar nuevas operaciones.

    2. Reconecta tus clientes MongoDB en el proceso secundario de Ruby inmediatamente después de la bifurcación mediante el Mongoid.reconnect_clients método. Esto es necesario para reactivar los hilos de monitorización del controlador en el proceso secundario.

La mayoría de los servidores web proporcionan enlaces que su aplicación puede usar para realizar acciones cuando se bifurcan los procesos de trabajo. Las siguientes secciones ofrecen ejemplos de configuración para algunos servidores web Ruby comunes.

Selecciona la pestaña que corresponde a tu versión de Puma:

Utilice el enlace on_worker_boot para reconectar clientes en los procesos de trabajo. Utilice los enlaces before_fork y on_refork para cerrar clientes en el proceso principal.

El siguiente código utiliza los ganchos on_worker_boot, before_fork y on_refork en un archivo de configuración de Puma de muestra:

config/puma.rb
# Runs in the Puma master process before it forks a child worker.
before_fork do
Mongoid.disconnect_clients
end
# Required when using Puma's fork_worker option. Runs in the
# child worker 0 process before it forks grandchild worker processes.
on_refork do
Mongoid.disconnect_clients
end
# Runs in each Puma child process after it forks from its parent.
on_worker_boot do
Mongoid.reconnect_clients
end

Utilice el enlace before_worker_boot para reconectar clientes en los procesos de trabajo. Utilice los enlaces before_fork y before_refork para cerrar clientes en el proceso principal. Para obtener más información sobre estos enlaces, consulte Ganchos del modo clúster en la documentación de la API de Puma.

El siguiente código utiliza los ganchos before_worker_boot, before_fork y before_refork en un archivo de configuración de Puma de muestra:

config/puma.rb
# Runs in the Puma master process before it forks a child worker.
before_fork do
Mongoid.disconnect_clients
end
# Required when using Puma's fork_worker option. Runs in the
# child worker 0 process before it forks grandchild worker processes.
before_refork do
Mongoid.disconnect_clients
end
# Runs in each Puma child process after it forks from its parent.
before_worker_boot do
Mongoid.reconnect_clients
end

Utilice el before_fork enlace para cerrar clientes en el proceso principal. Utilice el after_fork enlace para reconectar clientes en los procesos de trabajo. Para obtener más información sobre estos enlaces, consulte el Configurador en la documentación de la API de Unicorn.

El siguiente código utiliza los ganchos before_fork y after_fork en un archivo de configuración de Unicorn de muestra:

config/unicorn.rb
before_fork do |_server, _worker|
Mongoid.disconnect_clients
end
after_fork do |_server, _worker|
Mongoid.reconnect_clients
end

Utiliza el gancho starting_worker_process para volver a conectar clientes en los procesos de los trabajadores. Para obtener más información sobre este gancho, consulta Ganchos de creación inteligente en la documentación de Passenger.

Nota

Passenger tiene un gancho que se invoca en el proceso padre antes de que se bifurquen los procesos de trabajo.

El siguiente código utiliza el gancho starting_worker_process para reconectar clientes:

if defined?(PhusionPassenger)
PhusionPassenger.on_event(:starting_worker_process) do |forked|
Mongoid.reconnect_clients if forked
end
end

Volver

Middleware de caché de consultas

En esta página