2010-08-11 12 views
6

Po walce z różnymi rzeczami tu i tam, w końcu udało mi się uzyskać BottlePY działającego na Apache i uruchomić stronę z MongoDB. Jestem przyzwyczajony do uruchamiania aplikacji Django, więc opowiem o tym nieco w moim pytaniu.Dlaczego moje zdalne połączenie MongoDB wymaga uwierzytelnienia przy każdym zapytaniu?

Problem

każdym razem, gdy strona jest ładowana poprzez BottlePY, połączenie do bazy danych MongoDB znajduje się MongoHQ.com musi być ponownie uwierzytelniony (co oznacza, że ​​prawdopodobnie miał się ponownie).

co znalazłem

I załączeniu db.keep_alive() funkcję górze każdej funkcji modelu tak, aby przed uruchomieniem dowolnego zapytania MongoDB, to co¶ do uruchomienia prostego zapytania. Jeśli się nie powiedzie, przechwytuje błędy OperationFailure lub AutoReconnect, a następnie wywołuje funkcję db.authenticate(). Po ponownym uwierzytelnieniu dodam dziennik do dzienników dzienników, aby monitorować, jak często musi się ponownie uwierzytelniać. Obecnie musi się ponownie uwierzytelniać na każdym ładowaniu strony (co wymaga uruchomienia zapytania). To nie jest w porządku.

Różnica z Django

Używam tego samego pojęcia w Django, i odkryli, że połączenie db tylko musi być uwierzytelniona po 10-15 minutach bez zapytań są uruchamiane.

Nie rozumiem, dlaczego tworzenie połączenia pymongo w django różniło się od tworzenia jednego w butelce, ponieważ używam tego samego sterownika, funkcji i metod. Nie używam żadnego ORMS ani nic podobnego.

Wersje

  • Butelka: 0.9.dev
  • Django: 1.2.1 final
  • PyMongo: 1,8

Doceniam pomoc!

Aktualizacja: znajomy mógł szybko rzucić okiem i zauważył następujące informacje, które mogą pomóc w odpowiedzi na moje pytanie.

Wydaje się, że każdy wniosek jest uruchomienie nowego procesu Pythona, jak przeciwieństwie do Django, w których pojedynczy proces pozostaje uruchomiony przez długi okres czasu.

+0

Musisz uwierzytelniać tyle razy, ile wynosi liczba procesów roboczych. Nie można ponownie użyć połączeń bazy danych między procesami. Tak więc pierwsi uważają, że musisz rozwiązać w ramach (niezależnie od MongoDB), że istnieje tylko kilka procesów (w puli pracowników) w twojej strukturze obsługującej twoje żądania. os.getpid() powinien zwrócić tylko kilka rozłącznych wartości. – pts

+0

jak uruchomić swój python wewnątrz apache: przez mod_python lub wsgi? –

+0

@pts Dzięki! Patrzę na to. @ ralf.w. WSGI na serwerze Apache2 –

Odpowiedz

1

To właśnie skończyło się być dziwne między Butelki i MongoHQ.Nie znaleziono żadnego prawdziwego rozwiązania, ale nie mogłem go odtworzyć w innych frameworkach. Wszelkie inne pomysły są mile widziane.

0

robi swoje apache xxx.conf zawierać coś takiego:

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

myślę najważniejsza powinna być threads=1

+0

Ustawiono na 10, ale zmieniłem go na 1 i nie rozwiązał problemu. Dobra uwaga, dzięki! –

+0

Spróbuj także ustawić oba procesy = 1 i wątki = 1 i sprawdzić, czy problem zniknie. Należy pamiętać, że powinno to być tylko tymczasowe ustawienie debugowania, ponieważ ogranicza liczbę równoczesnych połączeń, które obsługuje twoja aplikacja internetowa. – pts

+0

Obie zmienne zostały już ustawione na 1. –

Powiązane problemy