Pergunta

Depois de lutar com coisas diferentes aqui e ali, finalmente fui capaz de conseguir Garrafa Correndo no Apache e execute um site movido a MongoDB. Estou acostumado a executar aplicativos de Django, por isso estarei relacionado a isso um pouco na minha pergunta.

O problema

Toda vez que uma página é carregada via garrafa, a conexão com o banco de dados MongoDB localizado no mongohq.com precisa ser autenticado (o que significa que provavelmente precisava se reconectar).

O que eu encontrei

Eu anexei um db.keep_alive() Funcionar na parte superior de cada função do modelo, de modo que, antes que qualquer consulta do MongoDB seja executada, ela tenta executar uma consulta simples. Se falhar, captura os erros da OperationFailure ou autoreconnect e depois chama o db.authenticate() função. Depois de reautenticar, eu o adiciono adicionar um log ao DB de logs para monitorar com que frequência ele precisa reautenticar. Atualmente, ele precisa reautenticar em cada carregamento de páginas (que requer a execução de uma consulta). Isso não está certo.

Diferença de Django

Eu uso esse mesmo conceito em Django e descobri que a conexão do banco de dados só precisa ser autenticada após 10 a 15 minutos de nenhuma dúvida sendo executada.

Não entendo por que criar uma conexão Pymongo no Django seria diferente de criar uma em garrafa, pois estou usando o mesmo driver, funções e métodos. Também não estou usando nenhum ORMS ou algo assim.

Versões

  • Garrafa: 0.9.Dev
  • Django: 1.2.1 final
  • Pymongo: 1.8

Agradeço a ajuda!

ATUALIZAÇÃO: Um amigo conseguiu dar uma olhada rápida e notou o seguinte que pode ajudar a responder à minha pergunta.

Parece que cada solicitação está lançando um novo processo Python, em oposição ao Django, no qual um único processo permanece em execução por um longo período de tempo.

Foi útil?

Solução

Isso acabou sendo uma coisa estranha entre a garrafa e o Mongohq. Nenhuma solução real foi encontrada, mas não consegui recriá -la com outras estruturas. Quaisquer outras idéias são apreciadas.

Outras dicas

Seu Apache xxx.conf contém algo como:

WSGIDaemonProcess project user=mysite group=www-data processes=5 threads=1 WSGIProcessGroup project

Eu acho que o mais importante deve ser threads=1

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top