Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why can my Django app not write to its log file?

$ 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

If Apache2 uses the Virtual Host setup file @ ~/public_html/idm.wsgi, what User does the system think is trying to write the the log file log/django.osqa.log ?

Why can my Django app not write to its log file?

like image 472
BryanWheelock Avatar asked Nov 04 '10 19:11

BryanWheelock


1 Answers

Apache's probably running as the apache user, meaning that it doesn't have write access to the log file. It starts up fine because it only has to read the wsgi file, which has read permissions for all users. either chmod a+w django.osqa.log or chown <apache-user> django.osqa.log.

Note: the preferred method would be to chown the file.

Note 2: this is distro-dependent, but since that looks Ubuntu-y, the apache user will be www-data.

like image 141
Benn Avatar answered Oct 17 '22 15:10

Benn