2010-10-27 6 views
0

J'essaye de déployer mon projet en utilisant mod_wsgi. Malheureusement j'obtenir:django: mod_wsgi ne parvient pas à ouvrir le fichier journal dans le répertoire du projet

[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64] Exception in WSGI handler: 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64] Traceback (most recent call last): 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64] File "/home/project/project/wsgi/project.wsgi", line 26, in application 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64]  return handler(environ, start_response) 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64] File "/usr/lib/python2.5/site-packages/Django-1.2.1-py2.5.egg/django/core/handlers/wsgi.py", line 230, in __call__ 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64]  self.load_middleware() 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64] File "/usr/lib/python2.5/site-packages/Django-1.2.1-py2.5.egg/django/core/handlers/base.py", line 33, in load_middleware 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64]  for middleware_path in settings.MIDDLEWARE_CLASSES: 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64] File "/usr/lib/python2.5/site-packages/Django-1.2.1-py2.5.egg/django/utils/functional.py", line 276, in __getattr__ 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64]  self._setup() 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64] File "/usr/lib/python2.5/site-packages/Django-1.2.1-py2.5.egg/django/conf/__init__.py", line 40, in _setup 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64]  self._wrapped = Settings(settings_module) 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64] File "/usr/lib/python2.5/site-packages/Django-1.2.1-py2.5.egg/django/conf/__init__.py", line 73, in __init__ 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64]  mod = importlib.import_module(self.SETTINGS_MODULE) 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64] File "/usr/lib/python2.5/site-packages/Django-1.2.1-py2.5.egg/django/utils/importlib.py", line 35, in import_module 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64]  __import__(name) 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64] File "/home/project/project/__init__.py", line 7, in <module> 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64]  logging.config.fileConfig(settings.LOG_CONFIG) 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64] File "/usr/lib/python2.5/logging/config.py", line 84, in fileConfig 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64]  handlers = _install_handlers(cp, formatters) 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64] File "/usr/lib/python2.5/logging/config.py", line 152, in _install_handlers 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64]  h = apply(klass, args) 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64] File "/usr/lib/python2.5/logging/handlers.py", line 109, in __init__ 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64]  BaseRotatingHandler.__init__(self, filename, mode, encoding) 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64] File "/usr/lib/python2.5/logging/handlers.py", line 61, in __init__ 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64]  logging.FileHandler.__init__(self, filename, mode, encoding) 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64] File "/usr/lib/python2.5/logging/__init__.py", line 772, in __init__ 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64]  stream = open(filename, mode) 
[Wed Oct 27 15:32:33 2010] [error] [client 10.13.3.64] IOError: [Errno 13] Permission denied: 'project.log' 

J'ai une entrée pour mon projet dans/etc/apache2/sites-enabled /:

SetEnv app_settings project.config.production 
WSGIDaemonProcess project user=project group=project threads=1 processes=1 home=/home/project/project python-path=/home/project 
<VirtualHost *> 
     ServerName project.internal 
     WSGIScriptAlias//home/project/project/wsgi/project.wsgi 
     WSGIProcessGroup %{GLOBAL} 
</VirtualHost> 

Mes journaux doivent être stockés dans le répertoire du projet. J'ai enquêté un peu et juste avant que project.log est censé être ouvert, je lance os.getcwd(), qui a retourné /. Quelqu'un peut-il me dire, ce que j'ai pu mal configuré que cela arrive?

+0

Regardez également 'sys.argv [0]'. –

+0

Pourriez-vous poster ce qu'il y a dans votre 'project.wsgi'? –

Répondre

1

Ce n'est pas vraiment une réponse, mais j'ai configuré mon site pour utiliser uniquement des chemins d'accès absolus, en tirant les chemins de base de settings.py. Vous pouvez avoir des variables dans settings.py qui ne sont pas des noms de paramètres Django officiels, et aussi longtemps que vous les nommez en utilisant le style ALLCAPS_WITH_UNDERSCORES, vous pourrez les importer avec import settings.

IIRC, les démons en général devraient utiliser des chemins absolus. Apparemment, l'utilisation de chemins d'accès relatifs peut être un trou de sécurité.

+0

En utilisant le chemin absolu dans la config de journalisation travaillé (utilisé par le système de journalisation python), mais je suis assez certain, ce chemin relatif peut être utilisé aussi - sur d'autres serveurs, nous avons déployé django de cette façon. J'aimerais faire de même. – gruszczy

+0

Ensuite, vous devrez peut-être faire un 'os.chdir()' dans votre fichier 'project.wsgi'; peut-être 'os.chdir (os.path.dirname (sys.argv [0]))'? Le point clé est que les chemins relatifs sont * fragiles *; vous pouvez exécuter votre programme de n'importe où en exécutant '/ home/project/project/wsgi/project.wsgi'. Alors, peut-on vraiment garantir que le répertoire de travail sera toujours le même? –

0

Il ne s'agit pas de chemins, mais de permissions. L'utilisateur Apache essaye de créer ce fichier journal, vous devriez donc lui donner des permissions d'écriture sur ce répertoire.

+0

... et tous les répertoires parents vers le haut dans l'arborescence – ducu

Questions connexes