Dieses Repository enthält den Code für wikispeedruns.com.
Wir empfehlen die Erstellung einer virtuellen Python-Umgebung zum Ausführen des Servers.
python -m venv env
Für Windows Powershell:
./env/Scripts/Activate.ps1
Für Linux / Unix-basiert (Mac)
source env/bin/activate
Installieren Sie dann die Anforderungen (mit aktivierter virtueller Umgebung).
pip install -r requirements.txt
Installieren Sie dann die Anforderungen (mit aktivierter virtueller Umgebung).
npm install
Es gibt eine Reihe von Skripten, die beim Einrichten der Web-App in Skripten helfen.
Sobald der MySQL-Server läuft, müssen Sie ein Konto erstellen. Standardmäßig gehen wir von einem user
ohne Passwort aus (siehe default.json
). Wenn Sie ein anderes MySQL-Setup verwenden möchten, können Sie prod.json
mit den relevanten MySQL-Feldern in config
erstellen, wodurch default.json
überschrieben wird.
Erstellen Sie dann die Datenbank und die Tabellen mit dem bereitgestellten Skript.
cd scripts
python create_db.py
Es gibt auch ein interaktives Skript (mit Anweisungen in den Skripten), mit dem ein lokales Administratorkonto eingerichtet werden kann. Über das Administratorkonto können Eingabeaufforderungen über /manage
verwaltet werden.
cd scripts
python create_admin_account.py
(Optional) Schließlich gibt es auch ein Skript zum Füllen der Datenbank mit Daten für die lokale Entwicklung
cd scripts
python populate_db.py
Legen Sie die Umgebungsvariable FLASK_ENV
in der Eingabeaufforderung fest, die Sie zum Ausführen des Flask-Servers verwenden möchten. Dadurch kann die lokale Instanz automatisch neu geladen werden, wenn Dateien geändert werden.
Zum Beispiel unter Linux/Mac
export FLASK_DEBUG=1
export FLASK_ENV="development"
Oder in Windows Powershell
$env:FLASK_ENV="development"
Aus dem Verzeichnis der obersten Ebene
npm run start
In einer separaten Shell, aus dem Verzeichnis der obersten Ebene
flask --app app run --debug
Um die Tests lokal auszuführen, müssen Sie in MYSQL ein weiteres Konto mit dem Benutzernamen testuser
und dem Passwort testpassword
erstellen. Unsere Tests sind standardmäßig so konfiguriert, dass sie für dieses Konto ausgeführt werden.
Führen Sie dann einfach pytest aus dem test
aus.
cd test
pytest
Beachten Sie, dass diese Tests auch in Docker ausgeführt werden, wenn Sie einen PR mithilfe von Github-Workflows erstellen. In Zukunft werden wir möglicherweise auch Docker einrichten, um Tests auszuführen.
Erfolge werden der Datenbank über Python-Skripte hinzugefügt. Führen Sie diese Python-Skripte mit aktivierter virtueller Umgebung aus, um Leistungstabellen zu füllen:
scriptsachievementadd_achievements_to_database.py
Alle zukünftigen Läufe werden anhand der Erfolge in der Datenbank überprüft. Wir können diese Prüfregeln auch auf frühere Läufe anwenden.
Führen Sie dieses Python-Skript aus, um historische Läufe rückwirkend mit allen aktuellen Erfolgen zu vergleichen.
scriptsachievementhistorical_achievements.py
Die asynchrone Aufgabenwarteschlange für Scraper-Aufgaben wird von zwei zusätzlichen Tools unterstützt: Sellerie und Redis. Celery wird als Python-Anforderung installiert, Redis (https://redis.io/) muss jedoch separat installiert und ausgeführt werden (ähnlich dem SQL-Server, Anweisungen finden Sie auf der Website). Für den Scraper task_queue ist außerdem der scraper_graph
erforderlich, der lokal heruntergeladen werden kann (wenden Sie sich an einen der Betreuer).
Anstatt den Pfad als Teil der Anfrage zu berechnen, was den Server einfriert, übergibt Flask die Scraper-Aufgaben an einen anderen von Sellery verwalteten Prozess (und kommuniziert über Redis). Diese Aufgaben werden mithilfe von Python-Dekoratoren definiert. Beispiele hierfür finden Sie hier.
Leider werden unter Windows weder Sellery noch Redis unterstützt. Wenn Sie also über einen Windows-Entwicklungscomputer verfügen, müssen Sie den Server über WSL ausführen. Beachten Sie, dass Sie, wenn Sie Ihre Windows-MySQL-Instanz behalten möchten, herausfinden müssen, auf welchem Port der Host-Windows-Computer in der WSL verfügbar ist. Siehe diesen Super-User-Beitrag. Beachten Sie, dass sich dies jedes Mal ändert, wenn WSL neu gestartet wird.