cgi/fastcgi auf uberspace

Django, Flask, Bottle, WSGI, CGI…
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

FWIW ich würde soweit weg von FCGI gehen wie möglich, ich werde das ganze wohl beginnend mit Django 1.7 deprecaten und dann spätestens in 1.9 entfernen.
BlackJack

@apollo13: Warum? Das ist das einzige was Uberspace anbietet und die Gründe sind IMHO einleuchtend. Man kann nur eine Python-Version gleichzeitig unterstützen und mit FastCGI hat man im Grunde den gleichen Effekt nur sprachunabhängig.
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Das letzte Flup Release ist aus 2011, Python-Standard für Webapps ist WSGI; wenn jemand unbedingt FCGI will, kann er sich selbst einen Wrapper rundherum schreiben, es gibt keinen Grund warum das in Django sein sollte.

EDIT:// Abgesehen davon ist die Kombo suexec+fcgi ein horror; damit das ordentlich geht darf man dann erstmal suexec source code hacken gehen…
BlackJack

@apollo13: Hat sich denn an den Standards FastCGI und WSGI zwischen denen Flup eine Brücke schlägt seit 2011 etwas verändert? Solange die sich nicht verändern braucht man doch auch kein neues Flup-Release, oder‽
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Ich würde dir zustimmen, wenn es eine Homepage geben würde wo man Fehler melden könnte etc… So schaut das Projekt ziemlich tot aus; und wie bereits gesagt ich sehe keinen Grund warum Django fastcgi nativ supporten sollte -- WSGI muss reichen.

EDIT:// Flask hat zb auch keinen expliziten fcgi support, eg siehe: http://flask.pocoo.org/docs/deploying/fastcgi/ -- Anbindung an fcgi wie es zum Beispiel Django mit runfcgi macht ist wirklich nicht Aufgabe des Frameworks, das ist etwas was jemand wenn er will als 3rd party app entwickeln kann und das man dann sowohl für Flask als auch Django (etc…) verwenden kann.
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