... oder "Wenn Designer jetzt PHP Code schreiben, dann muss ich meine Wordpress Installation abdrehen".
Ich war gestern auf den Barcamp Klagenfurt 2010 und nahm zufällig an einer Session zum Thema "Wordpress Themes" teil. Danach hab ich den festen Entschluss gefasst meine Wordpress Installation zu löschen und gegen statische HTML Seiten zu tauschen. Wie ich das gemacht habe möchte ich hier zeigen.
Problemstellung
Da ich nicht auf einer grünen Wiese ohne Inhalt für meinen Blog anfangen wollte, musste ich erst einmal meine bisherigen Seiten in einem vernünftigen Format aus dem Wordpress heraus bekommen. Leider ist das nicht so einfach, es gibt zwar viele Konverter die mir Inhalt ins Wordpress rein bringen, aber heraus bekommen es nur wenige. Ich habe mich dann schlussendlich für das Ruby Tool Jekyll entschieden. Diese Tool, welches selbst ein "static site generator" ist, möchte ich aber nur in der Migration Phase verwenden, danach bzw. jetzt setze ich Hyde für die Generierung meiner Seiten ein.
Wordpress Seiteninhalte auslesen mit Jekyll
Erstmal die nötigen Software installieren. In meinem Fall auf einem Debian Lenny Server.
Das es das Jekyll nicht als Debian Packet gibt, muss man es von hand installieren. Erst einmal Ruby und Compiler ...
apt-get install ruby ruby1.8-dev rubygems build-essential libmysqlclient15-dev
Jetzt Jekyll ...
gem sources -a http://gems.github.com gem install mojombo-jekyll
Nun weitere Ruby Packete die das Jekyll braucht ...
gem install mysql gem install sequel gem install rake-compiler -v 0.5.0
Da im Lenny ein zu altes rubygems vorhanden ist, quick & dirty aus dem unstable installieren ...
wget http://ftp.de.debian.org/debian/pool/main/libg/libgems-ruby/rubygems1.8_1.3.5-2_all.deb dpkg -i rubygems1.8_1.3.5-2_all.deb
Nun das letzte Ruby Packet ...
gem install hoe
Jetzt kann man mit Jekyll den Wordpress Seiten Inhalt auslesen ...
export DB=my_wordpress_db export USER=dbuser export PASS=dbpass ruby -r '/var/lib/gems/1.8/gems/mojombo-jekyll-__VERS__/lib/jekyll/converters/wordpress' \ -e 'Jekyll::WordPress.process("#{ENV["DB"]}", "#{ENV["USER"]}", "#{ENV["PASS"]}")'
Nun hat man im Verzeichnis "_posts" alle seine Wordpress Inhalte.
Da ich auf meinen Server keine Ruby installiert haben will und schon garnicht einen Compiler, fliegt alles wieder runter. Zu erste die Debian Packete ...
apt-get --purge remove cpp cpp-4.3 gcc gcc-4.3 libc6-dev libgmp3c2 libgomp1 \ libmpfr1ldbl libruby1.8 linux-libc-dev ruby ruby1.8 ruby1.8-dev apt-file \ libapt-pkg-perl libconfig-file-perl liblist-moreutils-perl menu irb1.8 \ libreadline-ruby1.8 rdoc1.8 rubygems rubygems1.8 build-essential dpkg-dev \ g++ g++-4.3 libstdc++6-4.3-dev libtimedate-perl make libmysqlclient15-dev \ zlib1g-dev
Danach die installierten Rubygems ...
rm -rf /var/lib/gems
Von Dr. Jekyll zu Mr. Hyde
Nun ist der Weg geebnet und ich konnte auf Hyde umsteigen. Ich bin dabei einer Anleitung von Steve Losh gefolgt, der seine Seite ebenfalls mit Hyde betreibt. Da es mit Beispielen immer leichter geht, kann ich noch Steve Losh Git empfehlen, in dem man den kompletten Code seiner Seite sieht.
Hier ist noch ein Script was die umgewandelten Wordpress Postings in die Hyde Verzeichnis Strutur umwandelt. Ich glaub der Code ist selbst erklärend.
#!/usr/bin/env bash
outdir="www.ca-net.org/content/blog/"
indir="_posts"
mkdir -p $outdir
cd $indir
for f in *; do
# get some metainfo from filename and file content
year=`echo $f | cut -f1 -d'-'`
month=`echo $f | cut -f2 -d'-'`
day=`echo $f | cut -f3 -d'-'`
# get post title
title=`grep "title: " $f | cut -f2- -d":"`
# strip \" from title
title=${title//\\\"/}
# strip " from title
title=${title//\"/}
# convert url encoded german umlaute
title=${title//\\xC3\\xBC/ü}; title=${title//\\xC3\\x9C/Ü};
title=${title//\\xC3\\xB6/ö}; title=${title//\\xC3\\x96/Ö};
title=${title//\\xC3\\xA4/ä}; title=${title//\\xC3\\x84/Ä};
# strip file extension
fwe=`basename $f .markdown`
# create output dir
mkdir -p ../$outdir/$year/$month
# build output file name
outfile="../$outdir/$year/$month/`echo $fwe | cut -f4- -d'-' | tr -s '-' '_'`.html"
# write hyde heady
cat - << __EOF__ > $outfile
{ % extends "_post.html" %}
{ % hyde
title: "$title"
created: $year-$month-$day
categories: ["private"]
%}
{ % block article %}
__EOF__
# write content
tail +7 $f >> $outfile
# write hyde footer
echo "{ % endblock %}" >> $outfile
echo "$outfile created"
done
Achtung: Im Script sind die 2 Zeichen "{" und "%" mit einen Leerzeichen dazwischen, bitte im abgespeicherten Script bei euch ab ändern.













































































