2012-03-22 4 views
0

J'ai une application qui fonctionne sur apache2. Je souhaite passer à uwsgi. Après le déploiement, j'ont dû faire face problème de fantaisie avec des erreurs aléatoires comme:wsgi django et aléatoire 500

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 envoyez-moi des exceptions similaires sur le courrier comme: pas de vue sur le nom du module - qui est bien sûr pas vrai, parce que cette application fonctionne sur apache depuis deux ans:

Je ne sais pas où est le problème - je sais que je ne suis pas capable de le reproduire à mon stade env - qui est une machine de production de clones. Pour autant que je sache, ce n'est pas une erreur de code ou un problème d'application.

à procution J'utilise la configuration actuelle:

J'utilise: django 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 avec ram de 8 Go

ces machines sont sous l'équilibreur de charge physicall pris en charge par la société d'hébergement.

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 

Je voudrais demander si quelqu'un vous communauté avait le problème identique ou similaire. Peut-être que quelqu'un a résolu et souhaite partager avec comment?

ce qui a trait Lukasz

Répondre

1

À moins que vous voyez d'autres erreurs que vous devriez essayer de comprendre l'erreur de votre obtenir le plus probable que ce vraiment ce que la cause est.

Dans votre cas, il vous manque une bibliothèque templatetags (nommée sso_token). Cela signifie probablement que vous n'avez pas réussi à installer une dépendance sur votre machine de production, ou que vos INSTALLED_APPS sont différents entre la production et le développement et qu'il vous manque l'application qui fournit cette bibliothèque.

Il est très peu probable que cela soit causé par votre déploiement et beaucoup plus susceptible d'être causé par une discontinuité entre vos environnements de production et de développement.

+0

hey, merci de répondre. Je ne pense pas parce que j'utilise le même paquet sur apache et uwsgi - et l'application fonctionne sur apache sans aucun problème. A propos de difrences dans envs - Je ne pense pas, parce que ma scène est la même que prod - c'est un miroir. – Lukasz

+0

@ user1286500 Pouvez-vous importer manuellement le shell sso_token inside manager sur le serveur de production? En outre, recherchez et supprimez tous les fichiers pyc en premier. – okm

+0

Oui je peux, tous les pyc sont enlevés après avoir redémarré uwsgi – Lukasz