Por que minha conexão remota mongodb requer autenticação em todas as consultas?
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.
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