cgi/fastcgi auf uberspace
@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.
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…
EDIT:// Abgesehen davon ist die Kombo suexec+fcgi ein horror; damit das ordentlich geht darf man dann erstmal suexec source code hacken gehen…
@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‽
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.
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.
@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:
Und viel mehr steht in der Flask-Dokumentation zu dem Thema ja auch nicht.
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()
- 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
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
- 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:
das hier:
Über Apache ausgegeben (Also Python per fast_CGI) ergibt das:
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
in der .htaccess Datei probiert. Bringt aber nix.
Das folgende in der index.fcgi:
ändert nur das defaultencoding, nicht aber das filesystemencoding:
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
Auf console ausgeführt ergibt dieses:
Code: Alles auswählen
print "sys.getfilesystemencoding():", sys.getfilesystemencoding()
print "sys.getdefaultencoding():", sys.getdefaultencoding()
Code: Alles auswählen
sys.getfilesystemencoding(): UTF-8
sys.getdefaultencoding(): ascii
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
Das folgende in der index.fcgi:
Code: Alles auswählen
reload(sys)
sys.setdefaultencoding('utf-8')
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
@jens: Idee habe ich keine (ausser „monkey patching” zu versuchen), aber gib mal weiter was der Support dazu sagt.
- 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:
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()
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
...
Es taucht nun kein UnicodeDecodeError bei os.path.join() auf, dafür aber später bei os.path.isdir() bzw. os.stat()
- 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
.htaccess
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/
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
Code: Alles auswählen
...
RewriteRule ^(.*)$ index.fcgi.sh/$1 [QSA,L]
...
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/