Springe zum Inhalt

Mit dem WordPress-Plugin Cachify steht eine Lösung zur Verfügung, die ein einfaches Zwischenspeichern von dynamisch erzeugten Webseiten bietet. Die Inhalte können mit unterschiedlichen Methoden zwischengespeichert werden. Unterstützt werden APC, Disk, DB und Memcached (nur mit Nginx). Da ich hier Nginx einsetze, bietet sich Memcached als schnellste Variante an. Wie Cachify und Nginx dann zu konfigurieren sind kann im Cachify-Wiki nachgelesen werden.

Die erfolgreiche Konfiguration läßt sich einfach überprüfen: es wird an das Ende der jeweiligen Webseite ein HTML-Kommentar von Cachify eingefügt. Ist dieser im Quelltext der Seite vohanden, dann wurde die Seite aus dem Cache, bei mir also von Nginx/Memcached ausgeliefert.

<!-- Cachify | http://cachify.de
Memcached @ 08.07.2016 13:25:07 -->

Nach ein paar Tests stellte sich heraus, dass genau eine Seite hier aus dem Blog nicht zwischengespeichert wird. Nach langem Suchen fand ich dann den Grund: der Seitenquelltext ist größer als 1 MB (bedingt durch sehr viele Kommentare auf der Seite) und Memcached speichert in der Standardkonfiguration nur Items bis zu einer Größe von 1 MB.

Ab der Version 1.4.2 von Memcached kann diese Größe konfiguriert werden. Unter Debian 8 fügt man dazu in die Datei /etc/memcached.conf eine neue Zeile mit z.B.

-I 2m

ein. Damit wird die Maximalgröße eines Items auf 2 MB angehoben. Anschließend muss Memcached neu gestartet werden. Mit folgendem Kommando lassen sich die aktuellen Einstellungen eines laufenden Memcached anzeigen:

# echo "stats settings" | netcat localhost 11211
STAT maxbytes 134217728
STAT maxconns 1024
STAT tcpport 11211
STAT udpport 11211
STAT inter 127.0.0.1
STAT verbosity 0
STAT oldest 0
STAT evictions on
STAT domain_socket NULL
STAT umask 700
STAT growth_factor 1.25
STAT chunk_size 48
STAT num_threads 4
STAT num_threads_per_udp 4
STAT stat_key_prefix :
STAT detail_enabled no
STAT reqs_per_event 20
STAT cas_enabled yes
STAT tcp_backlog 1024
STAT binding_protocol auto-negotiate
STAT auth_enabled_sasl no
STAT item_size_max 2097152
STAT maxconns_fast no
STAT hashpower_init 0
STAT slab_reassign no
STAT slab_automove 0
STAT lru_crawler no
STAT lru_crawler_sleep 100
STAT lru_crawler_tocrawl 0
STAT tail_repair_time 0
STAT flush_enabled yes
STAT hash_algorithm jenkins
END
^C

Unter item_size_max ist die neue Einstellung zu erkennen. Alternativ kann auch phpMemcachedAdmin verwendet werden, um den Inhalt der Caches anzuzeigen.

Speziell auf NanoBSD, der auf ALIX-Boards eingesetzten pfSense-Variante schlägt das Update auf die Version 2.3.1_5 über die Verwaltungswebseite und auch über die Shell fehlt. Nach dem Duplizieren des Slice scheint der Updateprozess zu hängen, es dauert sehr lange, bis einfach nur ein "Failed" ausgegeben wird.

Der Updateprozess startet das Update im Slice als chroot-Umgebung. Durch einen Bug ist dort manchmal unter NanoBSD keine resolv.conf vorhanden, welche zum Auflösen von Hostnamen erforderlich ist. Downloads können dann nicht ausgeführt werden. Der Fehler ist mittlerweile bekannt.

Abhilfe schafft ein Update im laufenden System. Dabei wird nicht in die chroot-Umgebung gewechselt, sondern das laufende System upgedatet:

pkg update -f
pkg upgrade -f

Danach sollte die Box neu gestartet werden. Nachteil dabei ist, dass man kein Slice mit der vorhergehenden Version mehr hat. Eventuell sollte man also vorher über "Diagnostics -> NanoBSD -> Duplicate boot slice" das aktuelle (ältere) Slice sichern, um eine Fallbackvariante zur Verfügung zu haben.

4

Vielleicht kennen einige die sogenannte Löffelsprache, bei der es sich um eine spielerische Modifikation der Sprache handelt. Die Regeln sind einfach: hinter jeden Vokal wird "lef" gesetzt und der Vokal wiederholt (andere Variationen benutzen "lew" oder auch "low"). Diphthonge werden insgesamt behandelt. Hinter sie wird ebenfalls ein "lef" gesetzt und der Diphthong wiederholt. Ein Beispiel: Aus "Jens Tautenhahn" wird "Jelefens Taulefautelefenhalefahn". Die Vokale und Diphthonge hinter denen "lef" eingefügt wird sind fett markiert.

Im Netz kursieren ein paar Beispielimplementierungen in verschiedenen Sprachen, diese sind jedoch leider nicht vollständig. Ich habe keine Implementierung gefunden, die die Diphthonge beachtet. Ein Anreiz, mal wieder sed in die Hand zu nehmen und es richtig zu machen:

alias loeffel="sed 's/\([äae]u\|[ae]i\|ie\|[aeiouäöü]\)/\1lef\1/g;'"

"[äae]u" bildet die Diphthonge äu, au und eu ab, "[ae]i" ai und ei, dazwischen ie und zum Schluss alle Vokale inklusive der entprechenden Umlaute. Durch die Klammerung kann man anschließend den Match als Parameter in der Ersetzung verwenden (\1).

Jetzt kann man "loeffel" prima als Pipe verwenden und allen möglichen Text "löffeln" ;)

Munin kann so eingestellt werden, dass die Grafiken und HTML-Dateien nicht alle fünf Minuten sondern nur auf Anforderung bzw. beim Abrufen der jeweiligen Webseite erzeugt werden. Zuständig dafür sind die Einstellungen cgi_strategy und html_strategy in /etc/munin/munin.conf. Munin benötigt dazu zwei FastCGI-Schnittstellen, welche idealerweise über einen Socket angesprochen werden. Früher konnte man das Problem lösen, indem man an passender Stelle mit spawn-fcgi die entprechenden FastCGI-Schnittstellen über Sockets bereitstellte. Eine Lösungsmöglichkeit war z.B. folgende:

/usr/bin/spawn-fcgi -s /var/run/munin/fcgi-graph.sock -U www-data -u www-data -g www-data /usr/lib/munin/cgi/munin-cgi-graph
/usr/bin/spawn-fcgi -s /var/run/munin/fcgi-html.sock -U www-data -u www-data -g munin  /usr/lib/munin/cgi/munin-cgi-html

In Zeiten von systemd läßt sich das nun eleganter bewerkstelligen. ...weiterlesen "FastCGI für Munin mit systemd"

7

Bei der Live-Vorschau von neuen Themen in WordPress kann es vorkommen, dass zwar die linke Sidebar für die Themeneinstellungen angezeigt wird, die eigentliche Anzeige aber leer bleibt.

Dieses Verhalten kann folgende Ursache haben:

  • das Plugin Widget Logic wird verwendet
  • im neuen Vorschau-Theme werden vorhandene Widgets angezeigt
  • in den Widget-Logic-Einstellungen dieser Widgets wird eine eigene Funktion aus der functions.php verwendet, welche aber im Vorschau-Theme nicht vorhanden ist

Dadurch tritt ein Fehler auf und die Vorschau wird nicht angezeigt, der Vorschaubereich bleibt leer.

Abhilfe schafft, vor dem Verwenden einer Funktion in Widget Logic zu testen, ob die Funktion überhaupt vorhanden ist. Für eine Funktion mit dem Namen "MeineFunktion" könnte man also folgendes in Widget Logic einfügen:

function_exists("MeineFunktion") && MeineFunktion()

MeineFunction wird dann nur aufgerufen, wenn sie auch wirklich existiert bzw. in der Themen-eigenen functions.php definiert worden ist.

Die Vorschau nicht aktiver bzw. noch nicht installierter Themen funktioniert anschließend wieder reibungslos.