Hallo,
ich habe folgendes Problem:
Ich habe auf einem Raspberry Pi mit Django ein Web-Interface aufgebaut, welches mir Daten aus eine Sqlite-Datenbank darstellt.
In der umgekehrten Richtung werden durch Buttons und den entsprechenden Views auf dem Raspberry Pi GPIOs gesetz bzw über das SPI-Interface externe Bausteine angesprochen. Dazu habe ich in das Django-Projekt entsprechende Python-Scripts eingeführt.
Diese ganzen Funktionen arbeiten mit dem Django-Entwicklungsserver problemlos.
Jetzt habe ich das ganze auf Apache2 umgestellt. Auch in dieser Konstellation werden ( fast ) alle Funktionen erfolgreich ausgeführt. Wenn ich jedoch das Python-Script, in dem der Zugriff auf die GPIO und das SPI-Interface des Raspberry Pi hergestellt wird ( import RPi.GPIO , import spidev ) einbinde, liefert Apache die Fehlermeldung das diese Module nicht gefunden werden und bricht die Darstellung ab.
Gibt es für dieses Problem eine direkte Lösung oder nur den Weg über ein cgi-Script unter Apache ? :K
Danke
Lutz
Django-Zugriff auf Python-Script unter Apache2
Das haben wir doch schon mal diskutiert. An der Antwort hat sich nix geändert: du brauchst den Apachen nicht nur nicht, er verursacht die Probleme, die du beschreibst. Warum tust du das, und warum fragst du um Hilfe, aber ignorierst die Antworten?
@Sirius3: Um besagte Datenbank zu bedienen, läuft auf dem RPi ein Python-Programm in einer Loop und überwacht verschiedene Sachen im Haus. Dieses Programm macht auch verschiedene Hardwaresteuerungen. Einen Teil davon möchte ich auch über das Web-Interface steuern. Beim Zugriff auf Python-Scripts, die nicht auf Hardware-Module des RPi zugreifen (z.B. Sqlite-Befehle ) oder bei direkten Shell-Befehlen für den RPi (z.B. Steuerung von Funksteckdosen) funktioniert die Kette Button->Aktion auf RPI->Rückmeldung in Sqlite->Darstellung im Web-Interface problemlos. Nur beim Import von RPi.GPIO bzw spidev gibt es Probleme.
Den Django-Entwicklungsserver im Hintergrund laufen zu lassen geht auch nicht, da alle Rückmeldungen in der Bedienungsoberfläche erscheinen.
Den Django-Entwicklungsserver im Hintergrund laufen zu lassen geht auch nicht, da alle Rückmeldungen in der Bedienungsoberfläche erscheinen.
@LutzKö: Du hast immer noch nicht geschrieben, für was Du eine Lösung brauchst, und warum Apache diese Lösung sein soll. Den Rest, den Du beschreibst, ist sehr verwirrend. Ein Monolit, der alles überwacht und steuert ist meist die einfachste Lösung, und solange es damit keine Probleme gibt, sollte man dabei bleiben.
- noisefloor
- User
- Beiträge: 4151
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
@LutzKö: die Frage, wie du Django in den Apache-Server anbindest, ist immer noch offen... Nutzt du mod_wsgi? Wenn ja, mit welcher Config?
Aber wie __deets__ schon sagt: Apache + Python ist nicht (mehr) wirklich gängig. Standard weil besser ist eigentlich, deinen WSGI-kompatible Webapplikation (wie Django) über einen WSGI-Applikationsserver wie Gunicorn laufen zu lassen. Davor kannst du noch nginx als Reverse Proxy setzen, musst du für Heimanwendungen aber nicht unbedingt, weil da in der Regel nicht Dutzende oder hunderte Request pro Sekunden kommen.
Die Config für diese Szenario ist einfach, dazu findest du etliche Seite im Web. Django + Gunicorn ist auch in der Django-Doku erklärt.
Kurzfassung:
Django, Gunicorn, evtl. nginx
Gruß, noisefloor
@LutzKö: die Frage, wie du Django in den Apache-Server anbindest, ist immer noch offen... Nutzt du mod_wsgi? Wenn ja, mit welcher Config?
Aber wie __deets__ schon sagt: Apache + Python ist nicht (mehr) wirklich gängig. Standard weil besser ist eigentlich, deinen WSGI-kompatible Webapplikation (wie Django) über einen WSGI-Applikationsserver wie Gunicorn laufen zu lassen. Davor kannst du noch nginx als Reverse Proxy setzen, musst du für Heimanwendungen aber nicht unbedingt, weil da in der Regel nicht Dutzende oder hunderte Request pro Sekunden kommen.
Die Config für diese Szenario ist einfach, dazu findest du etliche Seite im Web. Django + Gunicorn ist auch in der Django-Doku erklärt.
Kurzfassung:
Django, Gunicorn, evtl. nginx
Gruß, noisefloor
Selbstverständlich ist der Django entwicklungsserver ausreichend. Oder programmierst du eine Haussteuerung für das Olympiastadion?
Für alles was Python ist, macht es eh keinen Unterschied. Das läuft ja nicht magisch schneller, nur weil da der Apache irgendwo mit mischt. Und der Grund warum der Apache etwas bringt (neben statischen Dateien) - Verteilung von Anfragen auf mehrere Prozesse - ist für dich ein Genickbruch. Denn das macht deine GPIO und SPI Hardware nicht mit. Die gibts ja nur einmal. Aus verschiedenen Prozessen gleichzeitig darauf zuzugreifen funktioniert also nicht.
Der Ansatz von noisefloor würde gehen. Ist aber auch nicht trivial umsetzbar, und nur weil man das macht wenn man viele User bedienen muss, braucht man das für die Familie noch immer nicht.
Für alles was Python ist, macht es eh keinen Unterschied. Das läuft ja nicht magisch schneller, nur weil da der Apache irgendwo mit mischt. Und der Grund warum der Apache etwas bringt (neben statischen Dateien) - Verteilung von Anfragen auf mehrere Prozesse - ist für dich ein Genickbruch. Denn das macht deine GPIO und SPI Hardware nicht mit. Die gibts ja nur einmal. Aus verschiedenen Prozessen gleichzeitig darauf zuzugreifen funktioniert also nicht.
Der Ansatz von noisefloor würde gehen. Ist aber auch nicht trivial umsetzbar, und nur weil man das macht wenn man viele User bedienen muss, braucht man das für die Familie noch immer nicht.