Inbetriebnahme

Scio

Um Scio auf eine lokalen Maschine in Betrieb zu nehmen, müssen die folgenden Befehle ausgeführt werden. Die Befehle sind für Linux, wer einen Windows-PC hat, muss einige Befehle (beispielsweise den venv-Befehl) leicht anpassen.

# Repository clonen
git clone ssh://git@r-n-d.informatik.hs-augsburg.de:2222/thetadev/PyWeb-Scio.git
cd PyWeb-Scio

# Virtuelle Python-Umgebung erstellen und aktivieren.
python3 -m venv venv
source venv/bin/activate

# Abhängigkeiten installieren
pip3 install -r requirements.txt

Eventuell muss noch die Konfigurationsdatei unter Scio/settings.py angepasst werden. Scio benötigt einen Unsplash-API-Key, um Bilder abzurufen. Dieser muss unter dem Variablennamen UNSPLASH_ACCESS_KEY in der Konfigurationsdatei abgelegt werden.

Die Konfigurationsdatei beinhaltet bereits einen API-Key, den ich zum Testen erstellt habe.

Möchte man einen neuen API-Key erstellen, kann man sich mit einem kostenlosen Unsplash-Account unter https://unsplash.com/developers anmelden und eine neue Anwendung erstellen. Anschließend kopiert man sich den Access Key und fügt ihn in die Konfigurationsdatei ein.

# Datenbank aufsetzen
python3 manage.py migrate

# Admin-User erstellen (Benutzername und Passwort eingeben)
python manage.py createsuperuser

# Django-Server starten
python manage.py runserver

Setup

Wenn der Server läuft, kann man sich auf die Admin-Oberfläche begeben (http://127.0.0.1:8000/admin) und sich mit den vorhin angegebenen Zugangsdaten anmelden. In der im Repository befindlichen SQLite-Datenbank befinden sich bereits Kategrorien, Fragen und Bilder, sodass gleich losgespielt werden kann.

Möchte man aber mit einer leeren Datenbank starten, kann man die Daten aus csv-Dateien importieren. Dafür geht man zunächst auf Categorys > Importieren und lädt die CSV-Datei mit den Kategorien csv/Category-2021-02-03.csv hoch.

Anschließend wiederholt man diese Schritte für Questions und Images.

Um neue Bilder von Unsplash abzurufen, geht man in der Admin-Oberfläche auf Categorys, markiert alle Kategorien und wählt aus dem Dropdown-Menü (1-5) Unsplash-Abfragen durchführen.

Hierbei ist zu beachten, dass Unsplash ohne Bestätigung nur 50 API-Zugriffe pro Stunde zulässt. Bei einer zu hohen Zahl von Abfragen kann der Vorgang deswegen mit einer Fehlermeldung abbrechen.

Heroku

Möchte man Scio mit seinen Freunden spielen, so gibt es mit der Heroku-Plattform eine einfache und kostenlose Möglichkeit, seine Python-Webanwendung online zu stellen.

Hierfür muss man sich zunächst unter https://dashboard.heroku.com/ kostenlos anmelden. Jetzt kann man eine neue App erstellen und ihr einen Namen geben. Unter diesem Namen ist die App dann über das Internet erreichbar. Meine Heroku-App befindet sich beispielsweise unter https://scio.herokuapp.com.

Nun kann man die Anwendung per Git auf den Heroku-Server hochladen. Man beachte hier die Terminalausgabe. Heroku baut nun automatisch die App, installiert alle Abhängigkeiten und veröffentlicht sie.

git remote add heroku https://git.heroku.com/<APPNAME>.git
git push heroku master

Jetzt kann die App durch Aufruf der URL getestet werden. Um jetzt Administrationsbefehle auf dem Heroku-Server ausführen zu können und beispielsweise an einen Zugang für die Django-Adminoberfläche zu kommen muss man die Heroku-CLI installieren. Die Anleitung hierfür befindet sich hier: https://devcenter.heroku.com/articles/heroku-cli

Mit der Heroku-CLI kann man jetzt die manage.py aufrufen und einen Admin-User erstellen.

heroku run -a <APPNAME> python manage.py createsuperuser

Anschließend kann man mit dem Punkt Setup fortfahren.

Das Gratisangebot von Heroku hat allerdings zwei Nachteile. Zum einen wird die App bei 30 Minuten Inaktivität heruntergefahren und benötigt bei erneutem Aufruf oft über 10 Sekunden, um neu zu starten. Zum anderen gibt es ein Limit von 10.000 Datensätzen in der Datenbank, was bei häufigem Nachladen von neuen Bildern durchaus erreicht werden kann (in einer Testinstallation habe ich bereits über 3k Datensätze erreicht).

Dokumentation

Der Projektbericht wurde mit Sphinx erstellt und befindet sich im Ordner docs/.

Um den Bericht im pdf und html-Format zu erzeugen, müssen diese Befehle ausgeführt werden:

pip3 install -r requirements-doc.txt
cd docs
make html latexpdf

Um den Bericht in einer Python-IDE zu erstellen, kann auch das Skript build_docs.py ausgeführt werden.

Ich habe auch die LaTeX-Alternative rinohtype für den PDF-Export getestet (make rinoh), bin allerdings auf einige Probleme gestoßen. Erstens hat das rinohtype-Projekt seit über einem halben Jahr kein Release veröffentlicht, weswegen ich rinohtype selbst kompilieren musste, um einige Funktionen wie eine anpassbare Titelseite zu erhalten.

Zweitens produziert rinohtype einige Fehler wie beispielsweise fehlende Zeilenumbrüche bei der Darstellung von Funktionen.

_images/rinoh_fail.png

Fehlende Zeilenumbrüche bei rinohtype