Seite 2 von 2

Re: cgi/fastcgi auf uberspace

Verfasst: Sonntag 30. Juni 2013, 13:12
von 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.

Re: cgi/fastcgi auf uberspace

Verfasst: Sonntag 30. Juni 2013, 14:01
von apollo13
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).

Re: cgi/fastcgi auf uberspace

Verfasst: Donnerstag 18. Juli 2013, 12:26
von jens
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 ;)

Re: cgi/fastcgi auf uberspace

Verfasst: Donnerstag 18. Juli 2013, 13:24
von jens
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)

Re: cgi/fastcgi auf uberspace

Verfasst: Donnerstag 18. Juli 2013, 14:04
von BlackJack
@jens: Idee habe ich keine (ausser „monkey patching” zu versuchen), aber gib mal weiter was der Support dazu sagt. :-)

Re: cgi/fastcgi auf uberspace

Verfasst: Freitag 19. Juli 2013, 13:02
von jens
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() :?

Re: cgi/fastcgi auf uberspace

Verfasst: Freitag 19. Juli 2013, 13:46
von jens
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 :?

Re: cgi/fastcgi auf uberspace

Verfasst: Freitag 19. Juli 2013, 14:07
von jens
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/