Hallo, ich habe folgendes Problem:
Ich habe mit Django auf einem Raspberry Pi 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 eine entsprechendes Python-Script 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 für den Zugriff auf die GPIO und das SPI-Interface des Raspberry Pi hinzufüge ( import RPi.GPIO , import spidev ), 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 ?
Danke
Lutz
Raspberry Pi GPIO unter Apache2
Hallo __deets__,
was heißt lass den Apache weg. Wenn ich mit dem Gesamtprojekt in Produktion gehe, müsste während des bootens erst die Entwicklungsumgebung für Django gestartetet werden ( source /media/web/hausenv/bin/activate ), dann der Django-Server gestartet werden ( python /media/web/haus/manage.py runserver xxx.xxx.xxx.xxx:8000 ) und schließlich das Programm für die Haustechnik, welches besagte Sqlite-Datenbank aktualisiert, auch noch gestartet werden. Richtig ?
Lutz
was heißt lass den Apache weg. Wenn ich mit dem Gesamtprojekt in Produktion gehe, müsste während des bootens erst die Entwicklungsumgebung für Django gestartetet werden ( source /media/web/hausenv/bin/activate ), dann der Django-Server gestartet werden ( python /media/web/haus/manage.py runserver xxx.xxx.xxx.xxx:8000 ) und schließlich das Programm für die Haustechnik, welches besagte Sqlite-Datenbank aktualisiert, auch noch gestartet werden. Richtig ?
Lutz
Nein. Das activate braucchst du nicht, sondern du kannst einfach das python in /media/web/hausenv/bin/ nehmen, und damit direkt deinen Django-Server starten. Das ist dann das richtige Setup.LutzKö hat geschrieben:Hallo __deets__,
was heißt lass den Apache weg. Wenn ich mit dem Gesamtprojekt in Produktion gehe, müsste während des bootens erst die Entwicklungsumgebung für Django gestartetet werden ( source /media/web/hausenv/bin/activate ), dann der Django-Server gestartet werden ( python /media/web/haus/manage.py runserver xxx.xxx.xxx.xxx:8000 ) und schließlich das Programm für die Haustechnik, welches besagte Sqlite-Datenbank aktualisiert, auch noch gestartet werden. Richtig ?
Lutz
Was das sqlite-Programm tut oder nicht weiss ich natuerlich nicht.
Und dann laeuft der Django-Server, und alles ist gut. Falls es dir wichtig ist, auf Port 80 zu laufen (oder gar 443, dank let's encrypt), dann kannst du zB mit dem NGINX ein forwarding machen, so dass der Django-Server irgendwo auf einem unprivilgierten Port laufen kann. Ggf. ist das aber auch nicht noetig, sollte deine GPIO-Nutzung schon root-Rechte vorraussetzen.
Irgendwie bin ich neben der Spur: Ich habe ein script erstellt
#!/bin/sh
sleep 10
python /media/web/haus/manage.py runserver xxx.xxx.xxx.xxx:8000
und lass es über rc.local ausführen. Bricht mit der Meldung invalid syntax ab. Gleiche Meldung bekomme ich auch, wenn ich in der Konsole den Befehl ohne aktivierte Entwicklungsumgebung starte.
wenn ich
#!/bin/sh
sleep 10
/media/web/hausenv/bin/python /media/web/haus/manage.py runserver xxx.xxx.xxx.xxx:8000
verwende, wird python nicht gefunden
#!/bin/sh
sleep 10
python /media/web/haus/manage.py runserver xxx.xxx.xxx.xxx:8000
und lass es über rc.local ausführen. Bricht mit der Meldung invalid syntax ab. Gleiche Meldung bekomme ich auch, wenn ich in der Konsole den Befehl ohne aktivierte Entwicklungsumgebung starte.
wenn ich
#!/bin/sh
sleep 10
/media/web/hausenv/bin/python /media/web/haus/manage.py runserver xxx.xxx.xxx.xxx:8000
verwende, wird python nicht gefunden
Ich habe eine Lösung gefunden, stecke aber dennoch fest:
#!/bin/sh
sleep 10
cd /media/web/hausenv
. bin/activate
cd /media/web/haus
python manage.py runserver xxx.xxx.xxx.xxx:8000 &
Damit läuft der Server nach den booten als Hintergrundprozess.
Wenn ich dann das Hausprogramm starte und mit curses eine eigene Oberfläche erstelle, werden alles Meldungen vom Django-Server ( Start, Seitenwechsel etc ) in der Oberfläche angezeigt.
#!/bin/sh
sleep 10
cd /media/web/hausenv
. bin/activate
cd /media/web/haus
python manage.py runserver xxx.xxx.xxx.xxx:8000 &
Damit läuft der Server nach den booten als Hintergrundprozess.
Wenn ich dann das Hausprogramm starte und mit curses eine eigene Oberfläche erstelle, werden alles Meldungen vom Django-Server ( Start, Seitenwechsel etc ) in der Oberfläche angezeigt.