Statische Webseiten mit Cactus erstellen
Statische Webseiten haben einige Vorteile. In erster Linie in der Frage der Performance, aber auch der Sicherheit. Allerdings sind sie eben statisch und somit für dynamischen Inhalt nicht geeignet. Und das größte Problem: Jede Änderung muss auf jeder Unterseite nachgezogen werden, was in richtig viel Arbeit ausarten kann.
Dieses Problem lösen statische Webseitengeneratoren ziemlich elegant. Damit baut man praktisch seine Seite lokal auf dem Desktop zusammen, indem man wie üblich den Content erstellt, eine Art Theme drüberstülpt und alle möglichen dynamischen Aktionen während des Build-Vorgangs ausführen lassen kann (wie das Erstellen einer Sitemap usw.). Der Generator baut dann daraus die statischen HTML-Seiten mit den dazugehören Assets und wirft das in ein Verzeichnis aus.
Dieses Verzeichnis legt man dann auf den Webserver. Fertig. Ohne PHP oder einer anderen Skriptsprache und auch ohne Datenbank. Das deckt natürlich nur spezifische Anwedungsfälle ab, ist aber dann ein echter Gewinn.
Im folgenden einige Tipps bei der Arbeit mit dem Seitengenerator Cactus. Der ist frei verfügbar und nutzt Python - somit läuft er überall. Und das besondere Gimmick: Er nutzt Django-Templates und damit habe ich schon immer sehr gern gearbeitet.
Entwicklung mit Cactus und Visual Studio unter Windows
Das folgende kann man garantiert auch anders umsetzen, aber das ist meine Herangehensweise, die sehr gut funktioniert:
-
Unter Windows WSL installieren und auf der bash folgendes machen:
-
In WSL Python 3 und Cactus installieren:
sudo apt-get install python3-pip
sudo easy_install3 cactus
- Upgrades von Cactus gehen in Zukunft einfach mit
sudo easy_install3 --upgrade cactus
- Optional: für einige Extras brauchts noch mehr Pakete im WSL:
sudo apt-get install closure-compiler yui-compressor
(setze ich aber nicht ein) - Nun ins Zielverzeichnis wechseln (z.B.
/mnt/c/Code/cactus-test/trunk
) - Ein Projekt erstellen:
cactus create cactus-test
- Das erzeugt nun die Verzeichnisstruktur für das Projekt mit einem Standardtemplate
cactus build
sollte fehlerfrei durchlaufen (ggf. gibts ein paar Warnungen)
-
In WSL Python 3 und Cactus installieren:
-
In WAMP einen neuen Virtual Host erstellen, der auf das
.build
-Verzeichnis zeigt, beispielsweise aufC:\Code\cactus-test\trunk\cactus-test\.build
. -
Ein neues Projekt in Visual Studio erstellen:
- Das Verzeichnis
.build
sowieplugins/__pycache__
im VS-Projekt ausschließen. -
SCSS-Struktur aufbauen und was man sonst noch so braucht. Dabei sollte das
scss
-Verzeichnis imstatic
-Verzeichnis liegen, da sonst die generierten Pfade zu Fonts usw. nicht passen. -
In Hauptverzeichnis eine Datei
cactus-build.bat
erstellen mit folgendem Inhalt:
Diese Datei kann nun immer direkt aus Visual Studio heraus ausgeführt werden, um das Projekt bauen zu lassen (rechte Maustaste im Projektmappen-Explorer und "Execute File").@echo off C:\Windows\sysnative\bash.exe -c "cd /mnt/c/Code/cactus-test/trunk/cactus-test && rm -rf .build && mkdir .build && cactus build" exit
Wichtig: Unbedingt den Pfad in dieser bat-Datei richtig anpassen! Da steckt einrm -rf
drin und das kann sonst bös enden!
- Das Verzeichnis
- Das alles ins SVN einchecken und die üblichen Verdächtigen dabei ignorieren lassen.
Das heißt, in Zukunft muss WSL nicht laufen und es kann direkt in VS entwickelt werden. Nach einer Änderung in VS führt man die bat-Datei aus und testet das Ergebnis lokal mittels des eigenen VHost.
Auf dem Zielserver muss nur der Inhalt vom Verzeichnis .build
angeboten werden, z.B. direkt per SVN-Checkout.
.htaccess-Datei einbinden
Von sich aus ignoriert Cactus beim Bauen dot-Files, also z.B. auch eine .htaccess
. Will man so eine Datei aber inkludieren, macht man einfach eine Datei
plugins/include_htaccess.py
mit folgendem Inhalt:
# https://github.com/eudicots/Cactus/issues/223
import os, os.path
import sys
import shutil
def postBuild(site):
htaccess_path = os.path.join(site.paths['pages'], ".htaccess")
if os.path.isfile(htaccess_path):
shutil.copy(htaccess_path, site.paths['build'])
Warnungen in Cactus unterdrücken
Im Moment gibt es einige DeprecationWarnings in Cactus. Irgendein Update wird die in Zukunft bestimmt beheben, aber bis dahin will ich diese Warnungen in meiner
lokalen Installation nicht sehen. Die einfachste Methode für den Moment ist, die Datei /usr/local/bin/cactus
zu bearbeiten und die erste Zeile
anzupassen:
#!/usr/bin/python3 -W ignore::DeprecationWarning
Allerdings muss man das nach jedem Update wiederholen. Ist ja eh nur temporär ...