O problema foi resolvido depois que começamos a restabelecer as conexões com o banco de dados. Estávamos usando
sequel
no projeto, e o Passenger trata do problema somente quando o ActiveRecord é usado. Para expandi-lo, por padrão, o Passenger usa geração inteligente para aplicativos ruby. Ele primeiro gera o processo de pré-carregador, que carrega o framework e todas as bibliotecas. Depois que o processo de pré-carregador gera processos de trabalho quando surge a necessidade, que lidam com as solicitações. Ao gerar processos de trabalho, todos os descritores de arquivo são herdados do processo de pré-carregador. Portanto, se você não restabelecer a conexão com o banco de dados, todos os processos de trabalho compartilharão um, estabelecido pelo pré-carregador. O que leva a todo tipo de comportamento estranho. Como pedidos demorando muito.
Antes disso, também mudamos o manuseio de conexões WebSocket para um processo separado. Não tenho certeza se contribuiu para o problema no entanto.
Mais sobre isso aqui:
Desconectar se estiver usando o servidor Web de bifurcação com pré-carregamento de código
Compartilhamento não intencional de descritor de arquivo
Executando o servidor Action Cable no mesmo host e porta, sob um sub-URI