Para entrar no vagão da banda do Phusion Passenger, configuramos um servidor de teste para um pequeno aplicativo rails para testar as coisas.
Até agora tem sido muito bom de usar, torna a instalação / configuração e implantação de aplicativos uma brisa. O problema é que o site que estamos usando não é acessado com muita frequência e parece desligar os servidores em segundo plano. O que significa que quando alguém vai ao site, eles têm uma espera muito longa até que um novo servidor seja inicializado para lidar com a solicitação. Nós lemos a documentação, tentamos algumas configurações diferentes (modos smart / smart-lv2, passageidletime etc) e ainda não encontramos uma solução real.
Depois de examinar os resultados do Google, não conseguimos encontrar informações úteis. Atualmente, temos um cron job que faz solicitações de vez em quando na tentativa de manter os servidores em execução.
Alguém mais está enfrentando esse problema e você tem algum conselho para corrigi-lo?
fonte
Respostas:
O que está acontecendo é que seu aplicativo e / ou ApplicationSpawners estão fechando devido ao tempo limite. Para processar sua nova solicitação, o Passenger deve iniciar uma nova cópia do seu aplicativo, o que pode levar vários segundos, mesmo em uma máquina rápida. Para corrigir o problema, existem algumas opções de configuração do Apache que você pode usar para manter seu aplicativo ativo.
Aqui está especificamente o que fiz em meus servidores. O PassengerSpawnMethod e PassengerMaxPreloaderIdleTime são as opções de configuração mais importantes em sua situação.
Usando o modo de geração "inteligente" e desligando PassengerMaxPreloaderIdleTime, o Passenger manterá 1 cópia do seu aplicativo na memória o tempo todo (após a primeira solicitação após iniciar o Apache).
Application
Ouvintes individuais serãofork
removidos desta cópia, o que é uma operação muito barata. Acontece tão rapidamente que você não consegue dizer se seu aplicativo teve ou não que gerar um ouvinte.Se seu aplicativo for incompatível com geração inteligente, eu recomendo manter um PassengerPoolIdleTime grande e acessar seu site periodicamente usando curl e cronjob ou monit ou algo assim para garantir que o ouvinte permaneça vivo.
O Guia do usuário do passageiro é uma referência incrível para essas e outras opções de configuração.
editar : Se seu aplicativo for incompatível com geração inteligente, existem algumas novas opções que são muito boas
Portanto, se você combinar PassengerPreStart e PassengerMinInstances, o Passenger ativará 3 instâncias imediatamente após o carregamento do apache e sempre manterá pelo menos 3 instâncias ativadas, de modo que seus usuários raramente (ou nunca) verão um atraso.
Ou, se você estiver usando o spawning inteligente (recomendado)
PassengerMaxPreloaderIdleTime 0
já, você pode adicionarPassengerPreStart
para obter o benefício adicional da inicialização imediata.Muito obrigado aos heróis de phusion.nl !
fonte
RailsSpawnMethod
foi descontinuado em favor dePassengerSpawnMethod
modrails.com/documentation/…Apenas no caso de haver algum usuário do servidor nginx se deparando com esta questão, ambas as diretivas 'PassengerMaxRequests' e 'PassengerStatThrottleRate' não se traduzem em nginx. No entanto os outros fazem:
HTH!
EDIT
rails_spawn_method
está obsoleto no passageiro 3 em vez de usartudo o resto é bom até agora.
fonte
"passenger_max_preloader_idle_time" directive is duplicate
Você também pode usar PassengerMinInstances:
http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerMinInstances
Isso pode ser combinado com PassengerPreStart
fonte
RÉ:
Apenas algo a acrescentar e pode ser útil.
O método de spawn padrão na versão atual é "smart-lv2", que ignora o spawner do framework, então definir o tempo limite do spawner do framework não teria efeito de qualquer maneira, a menos que você definisse explicitamente o método de spawn como "smart".
Fonte: http://groups.google.com/group/phusion-passenger/browse_thread/thread/c21b8d17cdb073fd?pli=1
fonte
Se o seu host for um servidor compartilhado, como o meu, você não pode alterar as configurações e está preso a um cron job.
fonte
Eu também tive esse problema, mas não consegui alterar as configurações do passageiro porque não tinha permissão de gravação neste arquivo. Encontrei uma ferramenta ( http://www.wekkars.com ) que mantém meu aplicativo respondendo rapidamente. Talvez isso também possa ser uma solução para você.
fonte
verifique a versão do passageiro. era RailsSpawnMethod
<string>
para versões antigas.Se sim (se bem me lembro), substitua Passenger por Rails em todas as diretivas de configuração ou procure por documentos antigos de passageiros para obter mais detalhes
fonte