Django-Zugriff auf Python-Script unter Apache2

Django, Flask, Bottle, WSGI, CGI…
Antworten
LutzKö
User
Beiträge: 7
Registriert: Freitag 16. März 2018, 22:53

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
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@LutzKö: wie ist denn das Python in Apache konfiguriert? Warum verwendest Du überhaupt Apache? Was ist der Vorteil? Besser ist es, für die Hardwareansteuerung einen fortlaufenden Prozess zu haben.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

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?
LutzKö
User
Beiträge: 7
Registriert: Freitag 16. März 2018, 22:53

@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.
LutzKö
User
Beiträge: 7
Registriert: Freitag 16. März 2018, 22:53

@__deets__: Weil dein Antwort "du brauchst Apache nicht" mir keine Lösung bietet. Der Entwicklungsserver ist keine Lösung und etwas anderes hast du nicht angeboten. Also : welche Serverlösung ? Wie wird konfiguriert ?
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Benutzeravatar
noisefloor
User
Beiträge: 3843
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
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Antworten