Rails continua sendo reiniciado em produção Passenger
-
20-09-2019 - |
Pergunta
Estou executando um aplicativo que inicia um processo do Rufus Scheduler em um inicializador.O aplicativo está sendo executado com o Passenger em produção e notei alguns comportamentos estranhos:
Primeiro, para reiniciar o servidor e garantir que o inicializador seja executado, você deve ambos touch tmp/restart.txt
e carregue o aplicativo em um navegador.Nesse ponto, o inicializador é acionado.O horrível é que se você apenas tocar, os processos agendados pelo Rufus são reiniciados e não são reprogramados até que você carregue o aplicativo em um navegador.
Só isso eu posso lidar.Mas isso leva ao segundo problema:Percebo que o processo agendado não foi executado, então carrego uma página e de repente o arquivo de log está me informando que está executando os inicializadores como se eu tivesse reiniciado.Então, em algum momento, o Passenger está reiniciando aleatoriamente como se eu tivesse tocado em tmp/restart.txt e apagando meus processos agendados.
Eu tenho um entendimento incrivelmente ruim da integração do Passenger e do Rails, então não sei se essa reinicialização ocasional é aberrante ou faz parte da arquitetura.Alguém pode oferecer alguma sabedoria sobre esta situação?
Solução
O que você descreve é a maneira como o Passenger funciona.Ele gera novas instâncias do aplicativo quando o tráfego as justifica e as desliga após períodos de inatividade para liberar recursos.
Você deve ler a documentação do Passageiro, especialmente o Seção de controle e otimização de recursos.Existem configurações que podem evitar que o aplicativo seja encerrado pelo Passenger, se assim desejar.
Usando a configuração PassengerPoolIdleTime, você pode manter pelo menos um processo em execução, mas é quase certo que desejará que o Passenger inicie outras instâncias do aplicativo conforme necessário. Este tópico no Rufus Scheduler Google Group menciona o uso de arquivos de bloqueio para evitar que mais de um processo inicie o agendador, o que pode ser útil para você.