cgi/fastcgi auf uberspace

Django, Flask, Bottle, WSGI, CGI…
BlackJack

@apollo13: Was meinst Du mit nativ unterstützen? Natürlich muss man keinen FCGI-Server schreiben, aber eine einfache Möglichkeit Flup einzubinden, sollte doch drin sein. Der entsprechende Mehraufwand bei `bottle` besteht aus diesen paar Zeilen:

Code: Alles auswählen

class FlupFCGIServer(ServerAdapter):
    def run(self, handler): # pragma: no cover
        import flup.server.fcgi
        self.options.setdefault('bindAddress', (self.host, self.port))
        flup.server.fcgi.WSGIServer(handler, **self.options).run()
Und viel mehr steht in der Flask-Dokumentation zu dem Thema ja auch nicht.
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Django macht ein bisserl mehr, siehe auch das runfcgi management command. Die einfache Möglichkeit die du ansprichst ist ja bereits dadurch gegeben, dass Django eine WSGI-app zur Verfügung stellt (seit 1.4 oder so).
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hab gerade erst meine Seiten auf Uberspace migriert. Muß sagen, das einrichten ist echt schnell erledigt, dort.

Warum es kein mod_wsgi gibt, steht hier: https://uberspace.de/dokuwiki/brainstorming#mod_wsgi

Wenn irgendwann fast_CGI nicht mehr Unterstützt wird, muß ich mal weiter sehen. Aber momentan hängt PyLucid eh noch bei Django 1.4.x fest ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Und das erste Problem ;)

Auf console ausgeführt ergibt dieses:

Code: Alles auswählen

print "sys.getfilesystemencoding():", sys.getfilesystemencoding()
print "sys.getdefaultencoding():", sys.getdefaultencoding()
das hier:

Code: Alles auswählen

sys.getfilesystemencoding(): UTF-8
sys.getdefaultencoding(): ascii
Über Apache ausgegeben (Also Python per fast_CGI) ergibt das:

Code: Alles auswählen

sys.getfilesystemencoding(): ANSI_X3.4-1968
sys.getdefaultencoding(): ascii

Das hat zur folge, das Umlaute/Sonderzeichen bei os.path Sachen Probleme machen. Das ganze ist auch hier beschrieben:

https://docs.djangoproject.com/en/dev/h ... ncodeerror


Ich hab es mal mit

Code: Alles auswählen

SetEnv LANG en_US.UTF-8
SetEnv LC_ALL en_US.UTF-8
in der .htaccess Datei probiert. Bringt aber nix.


Das folgende in der index.fcgi:

Code: Alles auswählen

reload(sys)
sys.setdefaultencoding('utf-8')
ändert nur das defaultencoding, nicht aber das filesystemencoding:

Code: Alles auswählen

sys.getfilesystemencoding(): ANSI_X3.4-1968
sys.getdefaultencoding(): UTF-8

Ein sys.setfilesystemencoding() gibt es leider nicht.


Ideen?
(Den Support hab ich mal angeschrieben)
EDIT: Work-a-round hier: http://www.python-forum.de/viewtopic.ph ... 44#p243044 8)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

@jens: Idee habe ich keine (ausser „monkey patching” zu versuchen), aber gib mal weiter was der Support dazu sagt. :-)
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Leider habe ich noch keine Rückmeldung vom Support. Wobei der eigentlich immer recht schnell ist...

Zwischenzeitlich habe ich es mal mit dem folgenden in der index.fcgi probiert:

Code: Alles auswählen

...
reload(sys)
sys.setdefaultencoding("UTF-8")

def getfilesystemencoding():
    return "UTF-8"

sys.getfilesystemencoding=getfilesystemencoding
...
Das ändert zwar den Rückgabewert von sys.getdefaultencoding() und sys.getfilesystemencoding() auf UTF-8 Aber das Problem ist nur verlagert:

Es taucht nun kein UnicodeDecodeError bei os.path.join() auf, dafür aber später bei os.path.isdir() bzw. os.stat() :?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

jens hat geschrieben:Leider habe ich noch keine Rückmeldung vom Support. Wobei der eigentlich immer recht schnell ist...
So, Rückmeldung erhalten: Sie wissen auch erstmal keine Lösung :?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Der Support hatte eine Idee für einen work-a-round Hack... Per Wrapper Skript setzt man die Variablen.

Bsp:

index.fcgi.sh

Code: Alles auswählen

#!/bin/sh
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
exec ./index.fcgi
.htaccess

Code: Alles auswählen

...
RewriteRule ^(.*)$ index.fcgi.sh/$1 [QSA,L]
...
Das funktioniert so erstmal...



EDIT: Neuer Anlauf Django und fastCGI mit Python 3 auf Uberspace -> http://www.python-forum.de/viewtopic.php?f=7&t=34156 bzw. https://www.jensdiemer.de/de/Blog/2014/ ... tallieren/

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten