Menu Docs
Página inicial do Docs
/ /

Forking Configuração do Servidor

Neste guia, você pode aprender sobre como configurar seu aplicação para usar um servidor web de bifurcação.

Ao usar o Mongoid com um servidor web de bifurcação, siga as seguintes diretrizes:

  • Se possível, não realize nenhuma operação MongoDB no processo principal antes de forjar.

  • Você pode evitar erros de conexão, como Mongo::Error::SocketError e Mongo::Error::NoServerAvailable executando as seguintes ações:

    1. Desconecte os clientes MongoDB no processo Ruby pai imediatamente antes da bifurcação usando o Mongoid.disconnect_clients método. Isso garante que os processos pai e filho não reutilizem acidentalmente os mesmos soquetes e tenham conflitos de E/S. O Mongoid.disconnect_clients não interrompe nenhuma operação do MongoDB a bordo e se reconecta automaticamente quando você executa novas operações.

    2. Reconecte seus clientes MongoDB no processo Ruby filho imediatamente após a bifurcação usando o Mongoid.reconnect_clients método. Isso é necessário para reiniciar os threads de monitoramento do driver no processo filho.

A maioria dos servidores web fornece hooks que seu aplicação pode usar para executar ações quando os processos de trabalho são bifurcados. As seções a seguir fornecem exemplos de configuração para alguns servidores web Ruby comuns.

Use o hook de on_worker_boot para reconectar clientes nos funcionários. Use os hooks before_fork e on_refork para fechar clientes no processo pai. Para saber mais sobre esses hooks,consulte Hooks de modo clusterizado na documentação da API do Puma.

O código a seguir usa os ganchos on_worker_boot, before_fork e on_refork em um arquivo de configuração de exemplo do Puma:

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 workers.
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

Use o hook de before_fork para fechar clientes no processo principal. Use o hook after_fork para reconectar clientes nos funcionários. Para saber mais sobre esses hooks, consulte Configurator na documentação da API do Unicorn.

O código a seguir usa os ganchos before_fork e after_fork em um arquivo de configuração de exemplo do Unicorn:

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

Use o hook de starting_worker_process para reconectar clientes nos funcionários. Para saber mais sobre esse gancho, consulte Gatilhos de criação inteligentes na documentação do Passageiro.

Observação

O Passageiro tem um hook que é invocado no processo principal antes da bifurcação dos funcionários.

O seguinte código utiliza o hook starting_worker_process para reconectar clientes:

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

Voltar

Middleware de cache de query

Nesta página