2014-04-04 9 views
6

Ich bin eine django Webapp in vagrant (laufende Ubuntu) auf einem Windows-Rechner. Die App hat einen RotatingFileHandler eingerichtet, der größtenteils korrekt protokolliert wird. Aber schließlich füllt die Protokolldatei auf, an welcher Stelle es überRotatingFileHandler "Text Datei beschäftigt" in Windows

Logged from file util.py, line 79 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/logging/handlers.py", line 78, in emit 
    self.doRollover() 
    File "/usr/lib/python2.7/logging/handlers.py", line 141, in doRollover 
    os.rename(self.baseFilename, dfn) 
OSError: [Errno 26] Text file busy 

(Vielfaches) rollen nicht

Hier ist die Config-Schnipsel für die RotatingFileHandler:

'default': { 
    'level':'DEBUG', 
    'class':'logging.handlers.RotatingFileHandler', 
    'filename': 'logs/application.log', 
    'maxBytes': 1024 * 1024 * 5, # 5 MB 
    'backupCount': 5, 
    'formatter':'standard', 
}, 

Das Problem scheint, dass es das geteilte Vagrant-Verzeichnis anmeldet, so dass es in Windows-Dateisperrungsproblemen läuft. Wenn ich es ändere, um sich in einem Verzeichnis außerhalb des freigegebenen Verzeichnisses anzumelden, läuft es in Ordnung.

Meine Frage ist, kann ich etwas tun, um den oben genannten Fehler zu verhindern, ohne die Abmeldung aus dem Vagrant-Verzeichnis verschieben zu müssen?

Ich möchte es da drin lassen, damit es leichter auf andere Server portierbar ist, und so kann ich die Protokolle in Windows anzeigen.

+0

Haben Sie eine Lösung dafür gefunden? –

Antwort

7

Wenn Sie Django Entwicklungsserver ausgeführt wurden, wenn Sie den Fehler sah, versuchen

python manage.py runserver --noreload 

Dies liegt daran, standardmäßig laufen zwei Prozesse von Django-Servern. Einer ist der eigentliche Server, während der andere Änderungen im Code erkennt und den Server neu lädt. Daher wird settings.py zweimal importiert, und folglich greifen die beiden Prozesse gleichzeitig auf die Protokolldatei zu.

Weitere Details here.

+0

was passiert, wenn ich die Django App mit Apache starte. Apache erzeugt standardmäßig mehrere Threads, wenn Anfragen eingehen. Dies führt zu demselben Fehler, da die Wahrscheinlichkeit groß ist, dass zwei Threads dieselbe Protokolldatei zu einem bestimmten Zeitpunkt verwenden. – nkkrishnak

+0

@nkkrishnak Wir verwenden Apache in der Produktion und sehen diesen Fehler nie. Ich gehe davon aus, dass mehrere Threads auf die Protokolldatei zugreifen können. Das Problem tritt auf, wenn der Python-Entwicklungsserver mit Standardparametern ausgeführt wird. Dann wird settings.py zweimal importiert, wodurch mehrere Protokollhandler erstellt werden. – azalea

Verwandte Themen