1
votes

Django: 1.3.5
nginx: 1.2.6
uwsgi: 1.0.5

My django app runs on nginx and uwsgi. When opening admin page, 500 Error occured. This error is "ImportError: No module named urls".

Running the command "python manage.py runserver" and opening admin page, then 500 error didn't occured.

commenting admin on urls.py, then error doesnt occur.

This error only occurs on nginx and uwsgi.

How could I fix it?

urls.py

from django.conf.urls.defaults import *
from django.conf import settings
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
                       (r'^blog/', include('myApp.blog.urls')),
                       (r'^admin/', include(admin.site.urls))
                       )

wsgi.py

import os
import sys
import site

reload(sys)
sys.setdefaultencoding('utf-8')
sys.path.append('/path/to/myApp/')

site.addsitedir('/usr/lib/python2.6/site-packages')
os.environ['DJANGO_SETTINGS_MODULE'] = 'myApp.settings'

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

error traceback

Traceback (most recent call last):

File "/usr/lib/python2.6/site-packages/django/core/handlers/base.py", line 111, in get_response
    response = callback(request, *callback_args, **callback_kwargs)

File "/usr/lib/python2.6/site-packages/django/contrib/admin/sites.py", line 214, in wrapper
    return self.admin_view(view, cacheable)(*args, **kwargs)

File "/usr/lib/python2.6/site-packages/django/utils/decorators.py", line 93, in _wrapped_view
    response = view_func(request, *args, **kwargs)

File "/usr/lib/python2.6/site-packages/django/views/decorators/cache.py", line 79, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)

File "/usr/lib/python2.6/site-packages/django/contrib/admin/sites.py", line 197, in inner
    return view(request, *args, **kwargs)

File "/usr/lib/python2.6/site-packages/django/views/decorators/cache.py", line 79, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)

File "/usr/lib/python2.6/site-packages/django/contrib/admin/sites.py", line 382, in index
    context_instance=context_instance

File "/usr/lib/python2.6/site-packages/django/shortcuts/__init__.py", line 20, in render_to_response
    return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)

File "/usr/lib/python2.6/site-packages/django/template/loader.py", line 188, in render_to_string
    return t.render(context_instance)

File "/usr/lib/python2.6/site-packages/django/template/base.py", line 123, in render
    return self._render(context)

File "/usr/lib/python2.6/site-packages/django/template/base.py", line 117, in _render
    return self.nodelist.render(context)

File "/usr/lib/python2.6/site-packages/django/template/base.py", line 744, in render
    bits.append(self.render_node(node, context))

File "/usr/lib/python2.6/site-packages/django/template/base.py", line 757, in render_node
    return node.render(context)

File "/usr/lib/python2.6/site-packages/django/template/loader_tags.py", line 127, in render
    return compiled_parent._render(context)

File "/usr/lib/python2.6/site-packages/django/template/base.py", line 117, in _render
    return self.nodelist.render(context)

File "/usr/lib/python2.6/site-packages/django/template/base.py", line 744, in render
    bits.append(self.render_node(node, context))

File "/usr/lib/python2.6/site-packages/django/template/base.py", line 757, in render_node
    return node.render(context)

File "/usr/lib/python2.6/site-packages/django/template/loader_tags.py", line 127, in render
    return compiled_parent._render(context)

File "/usr/lib/python2.6/site-packages/django/template/base.py", line 117, in _render
    return self.nodelist.render(context)

File "/usr/lib/python2.6/site-packages/django/template/base.py", line 744, in render
    bits.append(self.render_node(node, context))

File "/usr/lib/python2.6/site-packages/django/template/base.py", line 757, in render_node
    return node.render(context)

File "/usr/lib/python2.6/site-packages/django/template/defaulttags.py", line 311, in render
    return self.nodelist_true.render(context)

File "/usr/lib/python2.6/site-packages/django/template/base.py", line 744, in render
    bits.append(self.render_node(node, context))

File "/usr/lib/python2.6/site-packages/django/template/base.py", line 757, in render_node
    return node.render(context)

File "/usr/lib/python2.6/site-packages/django/template/defaulttags.py", line 311, in render
    return self.nodelist_true.render(context)

File "/usr/lib/python2.6/site-packages/django/template/base.py", line 744, in render
    bits.append(self.render_node(node, context))

File "/usr/lib/python2.6/site-packages/django/template/base.py", line 757, in render_node
    return node.render(context)

File "/usr/lib/python2.6/site-packages/django/template/loader_tags.py", line 64, in render
    result = block.nodelist.render(context)

File "/usr/lib/python2.6/site-packages/django/template/base.py", line 744, in render
    bits.append(self.render_node(node, context))

File "/usr/lib/python2.6/site-packages/django/template/base.py", line 757, in render_node
    return node.render(context)

File "/usr/lib/python2.6/site-packages/django/template/defaulttags.py", line 437, in render
    url = reverse(view_name, args=args, kwargs=kwargs, current_app=context.current_app)

File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 391, in reverse
    *args, **kwargs)))

File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 312, in reverse
    possibilities = self.reverse_dict.getlist(lookup_view)

File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 229, in _get_reverse_dict
    self._populate()

File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 208, in _populate
      For name in pattern.reverse_dict:

File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 229, in _get_reverse_dict
    self._populate()

File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 208, in _populate
      For name in pattern.reverse_dict:

File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 229, in _get_reverse_dict
    self._populate()

File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 197, in _populate
      For pattern in reversed(self.url_patterns):

File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 279, in _get_url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)

File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py", line 274, in _get_urlconf_module
    self._urlconf_module = import_module(self.urlconf_name)

File "/usr/lib/python2.6/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)

ImportError: No module named urls

settings.py (INSTALLED_APPS)

ROOT_URLCONF = 'myApp.urls'
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin',
    'django.contrib.sitemaps',
    'django.contrib.markup',
    'myApp.blog',
)
1
also post your settings.py (remove secret data) - Hedde van der Heide
@Hedde i posted settings.py (INSTALLED_APPS). - lxmyys
Open a python shell and type this : from django.conf.urls.defaults import * if it cannot import and show you error so the urls package in not installed but if the python shell can import perhaps you have a duplication that disturb the url resolving process. - Mohammad
thanks. python shell could import. I tried reinstall django, but error occurs. deleting cookie and then login page is normally shown. but, click login button and 500 error occured. - lxmyys
can you tell me the errors ??? - Mohammad

1 Answers

0
votes

How do you start your uwsgi process? Your uwsgi process will need to be started from the location of your project's root directory.

I configure my uwsgi initialization file by giving it a PROJECT_HOME environment variable, which is defined in my process user's .bash_profile file.

In my process user's .bash_profile, I have:-

export PROJECT_HOME=/var/www/myproject

Then, in my uwsgi initialization file, I have:-

[uwsgi]

if-env = PROJECT_HOME
chdir = %(_)
touch-reload = %(_)/uwsgi.ini
daemonize = %(_)/myproject.log
endif =

if-env = VIRTUAL_ENV
virtualenv = %(_)
endif = 

socket = 127.0.0.1:3030
pidfile=/tmp/myproject.pid-3030
processes = 4
module = django.core.handlers.wsgi:WSGIHandler()
env = DJANGO_SETTINGS_MODULE=myproject.settings
master = True
vacuum = True
max-requests = 5000
logdate = True

enable-threads = True
single-interpreter = True

The chdir config in this uwsgi.ini file tells my uwsgi process to start the process from this directory and include this directory in PYTHONPATH so that my project's modules can be located.

If you also have a VIRTUAL_ENV environment defined, as you can see from my VIRTUAL_ENV configuration in the uwsgi.ini file, that VIRTUAL_ENV directory is also included in PYTHONPATH for the uwsgi process.

To run my uwsgi process, it is then as simple as running this command:-

uwsgi --ini /var/www/myproject/uwsgi.ini

This ensures that all your python modules (such as your urls.py) gets loaded correctly by your uwsgi process. Hope this helps!