Приложение Django выдает ложное исключение при импорте представлений из стороннего приложения - PullRequest
0 голосов
/ 21 декабря 2010

Я работаю над приложением Django, которое иногда выдает исключение ViewDoesNotExist при попытке импортировать модули из стороннего приложения (Solango, если быть точным). Под «изредка» я имею в виду достаточно часто, чтобы раздражать, но определенно меньшинство запросов. Solango находится в приложении PYTHONPATH и может быть надежно импортирован через консоль. Эта ошибка также никогда не возникает во время локальной разработки, поэтому, возможно, это как-то связано с настройкой сервера (приложение использует Apache + mod_wsgi в режиме демона).

Вот трассировка стека, показывающая ошибку, возникающую у администратора (хотя она встречается практически на каждой странице сайта):

Traceback:
File "/home/nybooks/ve/lib/python2.5/site-packages/django/core/handlers/base.py" in get_response
  92.                 response = callback(request, *callback_args, **callback_kwargs)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/contrib/admin/sites.py" in root
  445.             return self.index(request)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
  44.         response = view_func(request, *args, **kwargs)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/contrib/admin/sites.py" in index
  342.             context_instance=template.RequestContext(request)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/shortcuts/__init__.py" in render_to_response
  20.     return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/loader.py" in render_to_string
  108.     return t.render(context_instance)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/__init__.py" in render
  178.         return self.nodelist.render(context)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/__init__.py" in render
  778.                 bits.append(self.render_node(node, context))
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/__init__.py" in render_node
  791.         return node.render(context)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/loader_tags.py" in render
  97.         return compiled_parent.render(context)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/__init__.py" in render
  178.         return self.nodelist.render(context)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/__init__.py" in render
  778.                 bits.append(self.render_node(node, context))
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/__init__.py" in render_node
  791.         return node.render(context)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/loader_tags.py" in render
  97.         return compiled_parent.render(context)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/__init__.py" in render
  178.         return self.nodelist.render(context)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/__init__.py" in render
  778.                 bits.append(self.render_node(node, context))
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/__init__.py" in render_node
  791.         return node.render(context)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/defaulttags.py" in render
  245.                     return self.nodelist_true.render(context)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/__init__.py" in render
  778.                 bits.append(self.render_node(node, context))
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/__init__.py" in render_node
  791.         return node.render(context)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/defaulttags.py" in render
  255.             return self.nodelist_true.render(context)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/__init__.py" in render
  778.                 bits.append(self.render_node(node, context))
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/__init__.py" in render_node
  791.         return node.render(context)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/loader_tags.py" in render
  24.         result = self.nodelist.render(context)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/__init__.py" in render
  778.                 bits.append(self.render_node(node, context))
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/__init__.py" in render_node
  791.         return node.render(context)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/template/defaulttags.py" in render
  372.             url = reverse(self.view_name, args=args, kwargs=kwargs)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/core/urlresolvers.py" in reverse
  265.             *args, **kwargs)))
File "/home/nybooks/ve/lib/python2.5/site-packages/django/core/urlresolvers.py" in reverse
  238.         possibilities = self.reverse_dict.getlist(lookup_view)
File "/home/nybooks/ve/lib/python2.5/site-packages/django/core/urlresolvers.py" in _get_reverse_dict
  165.                     for name in pattern.reverse_dict:
File "/home/nybooks/ve/lib/python2.5/site-packages/django/core/urlresolvers.py" in _get_reverse_dict
  173.                     lookups.appendlist(pattern.callback, (bits, p_pattern))
File "/home/nybooks/ve/lib/python2.5/site-packages/django/core/urlresolvers.py" in _get_callback
  134.             raise ViewDoesNotExist, "Could not import %s. Error was: %s" % (mod_name, str(e))

Exception Type: ViewDoesNotExist at /admin/
Exception Value: Could not import solango.views. Error was: cannot import name settings

Любые идеи о том, что вызывает проблему, или, по крайней мере, как я могу отладить ее?

Ответы [ 2 ]

1 голос
/ 21 декабря 2010

Ваш веб-сервер не содержит файловых дескрипторов.Переконфигурируйте mod_wsgi для режима демона.

0 голосов
/ 22 декабря 2010

Вы можете иметь зависимости порядка в том, какой код импортируется.Это не проявляется на серверах разработки, так как предварительно загружено много материала, которого нет в рабочем сервере WSGI.

Так что в конечном итоге это похоже на то, как вы используете Django.Тем временем вы можете попробовать совет:

http://blog.dscpl.com.au/2010/03/improved-wsgi-script-for-use-with.html

для альтернативного содержимого для файла сценария WSGI и посмотрите, исчезнет ли проблема.

...