wsgi django и случайные 500 - PullRequest
       4

wsgi django и случайные 500

0 голосов
/ 22 марта 2012

У меня есть приложение, работающее на apache2. Я хочу перейти на UWSGI. После развертывания я столкнулся с необычной проблемой со случайными ошибками, такими как:

File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/wsgi.py", line 272, in __call__
30928-    response = self.get_response(request)
30929-  File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py", line 169, in get_response
30930-    response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
30931-  File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py", line 218, in handle_uncaught_exception
30932-    return callback(request, **param_dict)
30933-  File "/var/www/fancy_site/releases/current/fancy_site/utils/views.py", line 699, in server_error
30934-    'GIGYA_API_KEY':settings.GIGYA_API_KEY,
30935-  File "/usr/local/lib/python2.6/dist-packages/django/template/base.py", line 123, in render
30936-    return self._render(context)
30937-  File "/usr/local/lib/python2.6/dist-packages/django/test/utils.py", line 60, in instrumented_test_render
30938-    return self.nodelist.render(context)
30939-  File "/usr/local/lib/python2.6/dist-packages/django/template/base.py", line 744, in render
30940-    bits.append(self.render_node(node, context))
30941-  File "/usr/local/lib/python2.6/dist-packages/django/template/base.py", line 757, in render_node
30942-    return node.render(context)
30943-  File "/usr/local/lib/python2.6/dist-packages/django/template/loader_tags.py", line 105, in render
30944-    compiled_parent = self.get_parent(context)
30945-  File "/usr/local/lib/python2.6/dist-packages/django/template/loader_tags.py", line 102, in get_parent
30946-    return get_template(parent)
30947-  File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py", line 157, in get_template
30948-    template, origin = find_template(template_name)
30949-  File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py", line 134, in find_template
30950-    source, display_name = loader(name, dirs)
30951-  File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py", line 42, in __call__
30952-    return self.load_template(template_name, template_dirs)
30953-  File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py", line 48, in load_template
30954-    template = get_template_from_string(source, origin, template_name)
30955-  File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py", line 168, in get_template_from_string
30956-    return Template(source, origin, name)
30957-  File "/usr/local/lib/python2.6/dist-packages/debug_toolbar/panels/template.py", line 37, in new_template_init
30958-    old_template_init(self, template_string, origin, name)
30959-  File "/usr/local/lib/python2.6/dist-packages/django/template/base.py", line 108, in __init__
30960-    self.nodelist = compile_string(template_string, origin)
30961-  File "/usr/local/lib/python2.6/dist-packages/django/template/base.py", line 136, in compile_string
30962-    return parser.parse()
30963-  File "/usr/local/lib/python2.6/dist-packages/django/template/base.py", line 239, in parse
30964-    compiled_result = compile_func(self, token)
30965-  File "/usr/local/lib/python2.6/dist-packages/django/template/defaulttags.py", line 1054, in load
30966-    (taglib, e))
30967-django.template.base.TemplateSyntaxError: 'sso_token' is not a valid tag library: Template library sso_token not found, tried django.templatetags.sso_token,django.contrib.admin.templatetags.sso_token,django.contrib.webdesign.templatetags.sso_token,paging.templatetags.sso_token,sentry.templatetags.sso_token,tinymce.templatetags.sso_token,pagination.templatetags.sso_token,rosetta.templatetags.sso_token,flatblocks.templatetags.sso_token,oembed.templatetags.sso_token,debug_toolbar.templatetags.sso_token,memcache_status.templatetags.sso_token,mailchimp.templatetags.sso_token

django отправляет мне подобные исключения по почте, такие как: нет просмотров имени модуля - что, конечно, не соответствует действительности, потому что это приложение работает на apache с двух лет:)

Я понятия не имею, в чем проблема - я знаю, что не могу воспроизвести ее на моей стадии env - которая является машиной для производства клонов. Насколько я знаю, это не ошибка кода или проблема приложения.

в прокуроре Я использую текущую конфигурацию:

Я использую: Джанго 1.3.1 UWSGI 1.1 nginx 1.0.12-1 ~ dotdeb.0 Python 2.6 Debian 6.0.3 2 x QC Xeon E5540 с оперативной памятью 8 ГБ

эти машины находятся под балансировщиком физической нагрузки, поддерживаемым хостинговой компанией.

nginx cfg:

server { 
  listen 80;
        server_name www.fancy_site.fancy_domain fancy_site.fancy_domain
        server_name_in_redirect off;
        access_log /path/to/file.log;

        if ($host = 'fancy_site' ) {
            rewrite ^/(.*)$ http://www.fancy_site.fancy_domain/$1 permanent;
        }

        location /media/ {
            alias /path/to/media/;
            expires max;
        }

        location  /site_media/ {
            alias /path/to/media/;
            expires max;
        }

        location /static/ {
            alias   /path/to/static/;
            expires max;
        }

        gzip  on;
        gzip_http_version 1.0;
        gzip_vary on;
        gzip_comp_level 3;
        gzip_proxied any;
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
        gzip_buffers 16 8k;
        gzip_disable “MSIE [1-6].(?!.*SV1)”;

        location / {
            uwsgi_pass unix://path/to/uwsgi.socket;
            include uwsgi_params;
        }

}

UWSGI cfg:

prefix = /path/to/prod_direcotry
master = true
processes = 80
uid = fancy_application
gid = www-data
memory-report = true
max-requests = 800
stdout_logfile = /path/to/uwsgi.log
daemonize = /path/to/uwsgi.log
redirect_stderr = true
logfile-chown=www-data
socket = /path/to/uwsgi.socket
chdir = /path/to/application_direcotry
pythonpath = /path/to/to_current_release_of_application
env = DJANGO_SETTINGS_MODULE=application_direcotry.settings
module = django.core.handlers.wsgi:WSGIHandler()
touch-reload = %(prefix)/touch_to_restart

Я хотел бы спросить сообщество, есть ли у кого-то такая же или похожая проблема. Может быть, кто-то решил и хочет поделиться, как?

С уважением Лукаш

1 Ответ

1 голос
/ 22 марта 2012

Если вы не видите других ошибок, вы должны попытаться понять, что ошибка, которую вы получаете, скорее всего, именно в этом причина.

В вашем случае вам не хватает библиотеки тегов-шаблонов (названной sso_token).Скорее всего, это означает, что вам не удалось установить зависимость на производственном компьютере, или ваши INSTALLED_APPS различаются между производством и dev, и вы пропустили приложение, предоставляющее эту библиотеку.

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

...