[bottle] 'thread._local' object has no attribute 'vars'

Django, Flask, Bottle, WSGI, CGI…
Antworten
Lonestar
User
Beiträge: 147
Registriert: Samstag 9. August 2008, 08:31

Nabend,
hier mal kurz mein momentan laufendes Projekt:
Rechner WinXP
Webserver Apache2.2 mit mod_wsgi
python 2.6
benutzte Module
bottle, ConfigParser, random
und ein eigenes zur Anbindung an eine MySQL-Datenbank


ich habe eine erste Version von meinem Projekt soweit am laufen das ich endlich mal was sehen kann. Auf dem Entwicklungsserver von Bottle selbst läuft alles super - allerdings hier auf meinem Ubuntu-System. Danach habe einfach mal mein Projekt auf den oben beschriebenen Server aufgespielt.

Das ganze läuft eine gewisse zeit, dann bekomme ich ,erst nur vereinzelt - danach aber ständig die Rückmeldung

Code: Alles auswählen

Error 500: Internal Server Error

Sorry, the requested URL /site1 caused an error:

            Unhandled Exception: AttributeError("'thread._local' object has no attribute 'vars'",)
 
Der Fehler tritt auch auf wenn ich mein eigenes Modul nicht einbinde - und nur Seiten aufrufe die statischen Inhalt haben.
Allerdings kann ich den Fehler nicht hervorrufen bei der Auslieferung von Statischen Dateien die ich wie folgt ausliefere

Code: Alles auswählen

@route('/img/:filename')
def static_img(filename):
    send_file(filename,  root=IMAGE_DIR)
da ich mich erst seit knapp 2 Wochen mit Bottle beschäftige habe ich keine Ahnung wo ich da anfangen soll zu suchen. Hat mal jemand einen Hinweis für mich wo ich da gucken muss?
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Du benutzt wahrscheinlich Cheetah Templates. Das ist die einzige Stelle, in der `.vars` vor kommt. Diese sind nicht Thread-save und sehr umständlich Thread-save zu machen. Ich hab es versucht, bin aber anscheinend gescheitert. Entweder du benutzt eine andere Template Engine, oder du deaktivierst die Threads oder du wartest, bis ich dafür eine Lösung gefunden habe. Vielleicht hat ja hier jemand eine Idee.
Bottle: Micro Web Framework + Development Blog
Lonestar
User
Beiträge: 147
Registriert: Samstag 9. August 2008, 08:31

guten Morgen,
ja da liegst du schon richtig, ich verwende Cheetah. Da ich eigentlich keine Lust habe für das kleine Projekt noch mal die Templates zu überarbeiten für eine andere engine habe ich mir gedacht ich schalte mal die Threads ab. Das dürfte kein Problem sein, das Projekt läuft eh nur für 1-2 Benutzer im Intranet.

Allerdings bin ich nicht allzu fit in sachen Webserver konfigurieren. Ich habe ein Wenig die Doku zu mod_wsgi gelesen. Hier wird vorgeschlagen einen WSGIDaemonProcess zu starten dem ich dann Angaben wie multithread und multiprocess mitgeben kann. Ich bekomme nicht mal einen einzigen Daemon Prozess ans laufen. Das liegt sicher an meiner Konfiguration. Ich habe mein Projekt mit einem WSGIScriptAlias eingebunden wie in der Doku beschrieben

Code: Alles auswählen

WSGIScriptAlias /visu "c:/www/visu/wsgi_main.wsgi"
<Directory c:/www/visu>
	SetHandler wsgi-script
	Options ExecCGI
</Directory>
sobald ich ein einfaches 'WSGIDaemonProcess wsgi_main' einfüge startet der apache nicht mehr ich bekkomme nur die Fehlermeldung 'The requestet operation has failed!'. Nicht mal ein Eintrag in der 'error.log' wird erstellt.
Gehe ich das Problem überhaupt richtig an? Oder bin ich auf dem Holzweg?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Lonestar hat geschrieben:guten Morgen,
ja da liegst du schon richtig, ich verwende Cheetah. Da ich eigentlich keine Lust habe für das kleine Projekt noch mal die Templates zu überarbeiten für eine andere engine...
Wenn es Dir vor allem um das mühselige Anpassen der Syntax geht, beachte diesen Thread:
http://www.python-forum.de/topic-17508, ... h&start=15

Allerdings weiß ich nicht, wie stark sich jinja2 vom generellen Aufbau (Inheritance, Makros usw.) von cheetah unterscheidet.
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Lonestar hat geschrieben:Gehe ich das Problem überhaupt richtig an? Oder bin ich auf dem Holzweg?
Holzweg, windows kann nur Embedded mode und keinen Daemon mode…
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Ich würde Bottle stand-alone auf einem lokalen Port laufen lasen und mit mod_proxy durch deinen apache schleifen. Oder apache ganz weg lassen. Indianer und Flachen sind immer so eine Sache ;)
Bottle: Micro Web Framework + Development Blog
Antworten