为什么我的Django应用程序不能写入其日志文件?

时间:2010-11-04 19:41:19

标签: python django apache2 mod-wsgi

$ sudo /etc/init.d/apache2 restart

 * Restarting web server apache2  
 ... waiting .   ...done.  

username @ servername Thu Nov 04 18:54:37~ / public_html / IDM_app
$ sudo tail -n 60 /var/log/apache2/error.log

[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38] mod_wsgi (pid=28760): Exception occurred processing WSGI script '/home/username/public_html/idm.wsgi'.  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38] Traceback (most recent call last):  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/usr/local/lib/python2.7/site-packages/Django-1.2.3-py2.7.egg/django/core/handlers/wsgi.py", line 230, in __call__  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     self.load_middleware()  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/usr/local/lib/python2.7/site-packages/Django-1.2.3-py2.7.egg/django/core/handlers/base.py", line 33, in load_middleware  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     for middleware_path in settings.MIDDLEWARE_CLASSES:  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/usr/local/lib/python2.7/site-packages/Django-1.2.3-py2.7.egg/django/utils/functional.py", line 276, in __getattr__  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     self._setup()  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/usr/local/lib/python2.7/site-packages/Django-1.2.3-py2.7.egg/django/conf/__init__.py", line 40, in _setup  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     self._wrapped = Settings(settings_module)  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/usr/local/lib/python2.7/site-packages/Django-1.2.3-py2.7.egg/django/conf/__init__.py", line 73, in __init__  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     mod = importlib.import_module(self.SETTINGS_MODULE)  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/usr/local/lib/python2.7/site-packages/Django-1.2.3-py2.7.egg/django/utils/importlib.py", line 35, in import_module  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     __import__(name)  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/home/username/public_html/IDM_app/settings.py", line 60, in <module>  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     from settings_local import *  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/home/username/public_html/IDM_app/settings_local.py", line 1, in <module>  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     from settings_Slicehost_idm import *  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/home/username/public_html/IDM_app/settings_Slicehost_idm.py", line 12, in <module>  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     format='%(pathname)s TIME: %(asctime)s MSG: %(filename)s:%(funcName)s:%(lineno)d %(message)s',  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/usr/local/lib/python2.7/logging/__init__.py", line 1500, in basicConfig  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     hdlr = FileHandler(filename, mode)  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/usr/local/lib/python2.7/logging/__init__.py", line 889, in __init__  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     StreamHandler.__init__(self, self._open())  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]   File "/usr/local/lib/python2.7/logging/__init__.py", line 908, in _open  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38]     stream = open(self.baseFilename, self.mode)  
[Thu Nov 04 18:54:27 2010] [error] [client 8.17.58.38] IOError: [Errno 13] Permission denied: '/home/username/public_html/IDM_app/log/django.osqa.log'  
[Thu Nov 04 18:54:36 2010] [notice] caught SIGTERM, shutting down  
[Thu Nov 04 18:54:37 2010] [notice] Apache/2.2.14 (Ubuntu) mod_wsgi/3.3 Python/2.7 configured -- resuming normal operations  

username @ servername Thu Nov 04 18:54:42~ / public_html / IDM_app
$ ls -l /home/username/public_html/IDM_app/log/django.osqa.log

-rw-r--r-- 1 username 0 Nov  4 18:24 /home/username/public_html/IDM_app/log/django.osqa.log  

username @ servername Thu Nov 04 19:08:41~ / public_html / IDM_app
** $ ls -l~ / public_html / idm.wsgi **

-rw-r--r-- 1 username 222 Nov  4 18:53 /home/username/public_html/idm.wsgi  

username @ servername Thu Nov 04 19:10:50~ / public_html / IDM_app
$ cat~ / public_html / idm.wsgi

import os
import sys

sys.path.append('/home/username/public_html/IDM_app/')

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

username @ servername Thu Nov 04 19:11:02~ / public_html / IDM_app $ whoami

username

如果Apache2使用虚拟主机设置文件@〜/ public_html / idm.wsgi,那么系统认为用户在尝试编写日志文件log / django.osqa.log?

为什么我的Django应用程序不能写入其日志文件?

1 个答案:

答案 0 :(得分:17)

Apache可能作为apache用户运行,这意味着它没有对日志文件的写访问权。它启动很好,因为它只需要读取wsgi文件,该文件具有所有用户的读取权限。 chmod a+w django.osqa.logchown <apache-user> django.osqa.log

注意:首选方法是chown文件。

注意2:这是依赖于发行版的,但由于它看起来像Ubuntu-y,因此apache用户将是www-data