2010-10-07 7 views
2

Je suis en train de faire le travail de django avec wsgi dans un hébergement mutualisé, donc je ne peux pas accéder aux journaux de serveur,Rediriger stdout et stderr de fichier dans Django avec wsgi

Je suis en train de rediriger la sortie vers un fichier dans mon script django.wsgi, comme ceci:

saveout = sys.stdout 
log_out = open('out.log', 'w') 
sys.stdout = log_out 

mais ceci est l'erreur que j'ai (dans le seul journal d'erreurs que je peux accéder)

[Thu Oct 07 19:18:08 2010] [error] [client <ip>] File "/home/myuser/public_html/django.wsgi", line 9, in <module> 
[Thu Oct 07 19:18:08 2010] [error] [client <ip>] mod_wsgi (pid=30677): Exception occurred processing WSGI script '/home/myuser/public_html/django.wsgi'. 

et qui est toute l'erreur I peut obtenir

La ligne 9 est celle qui essaie d'ouvrir le fichier. J'ai essayé de créer précédemment le fichier, donnant l'accès d'écriture à tout le monde, sans le fichier précédemment créé .. et rien. Dans l'application, je reçois seulement une erreur de 500 serveurs.

Existe-t-il un moyen approprié d'obtenir cette sortie sans avoir accès aux journaux Apache?

Modifié:

En utilisant des chemins absolus, je peux ouvrir les fichiers et les écrire, mais je reçois des fichiers vides à moins que je ferme les fichiers à la fin, est-il nécessaire? Pourrais-je laisser les fichiers ouverts? ..

En ce qui concerne le problème initial, même si j'ai utilisé la gestion des exceptions, écrire un "OK" à la fin de mon script, puis fermez le fichier, mais toujours obtenir le erreur:

[Thu Oct 07 13:33:07 2010] [error] [client <ip>] mod_wsgi (pid=32541): Exception occurred processing WSGI script '/home/myuser/public_html/django.wsgi'. 

Si je soulève intentionnellement une erreur, il est enregistré dans le fichier, alors que je reçois « ok » Je pense que le script a bien fonctionné, mais le résultat est toujours cette erreur de message ... pas d'indices

Répondre

3

Vous ne pouvez pas utiliser les chemins d'accès relatifs tels que out.log dans une application WSGI. WSGI ne spécifie pas où le répertoire de travail pointera et mod_wsgi ne le définit pas sauf si on lui demande spécifiquement en mode démon.

Utilisez un chemin d'accès absolu basé sur la racine de votre application. Vous pouvez utiliser os.path.dirname(__file__) pour obtenir le répertoire contenant le script/module en cours si nécessaire.

+0

Cela faisait partie du problème, merci! – Sam

Questions connexes