Als ich diesen Blog ursprünglich gestartet habe, war meine erste Wahl als Blogging-Plattform Blogspot von Google. Mein alter Blog ist immer noch dort, aber in der Zwischenzeit bin ich zu meinem neuen Blog migriert, wo du dich gerade befindest. Er basiert auf Octopress und wird auf Heroku gehostet.

Was ich an Google Blogspot mochte

Zuallererst war der Hauptgrund, warum ich damals Blogspot gewählt habe, seine Einfachheit. Man kann einen Blog in kürzester Zeit zum Laufen bringen. Da ich bereits ein Google-Konto hatte, war es die logischste Option. Nach einer Weile begann ich, meine Artikel in MarsEdit zu schreiben und Voila für Screenshots zu verwenden. Schreibe etwas Text in MarsEdit, mache einen Screenshot mit Voila, kopiere und füge ihn in MarsEdit ein und veröffentliche das Ganze auf Blogspot.

Die eingebauten Analysen in Blogspot sind auch praktisch, wenn man einen Blog startet. Nichts einzurichten - es ist einfach da und einsatzbereit.

Meine Anforderungen ans Bloggen

Nach einer Weile wurde mir das Formatieren in MarsEdit und wie es auf Blogspot erschien etwas leid. Außerdem wollte ich einfach nur schreiben und nicht für die Formatierung herumklicken. Zudem hatte ich keine Möglichkeit, meine Arbeit zu versionieren.

Zwei Anforderungen entstanden daher. Eine natürliche Lösung für das Formatierungsproblem ist die Markdown-Sprache. Für die Versionierung bin ich an SVN und GIT gewöhnt; ich wollte das in meinen Blogging-Workflow integrieren.

Octopress als neue Blogging-Plattform wählen

Nach dem Googeln und Lesen fand ich den Blogbeitrag “Choosing a Blogging Platform” von Mark Birbeck.

Meine endgültige Wahl fiel auf Octopress. Als Programmierer, der Projekte mit Ruby on Rails gemacht hat, schien das eine natürliche Wahl zu sein.

Octopress einrichten

Octopress ist einfach zu starten, da es mit einer guten Dokumentation kommt. Die folgenden Schritte wurden von hier genommen, um Octopress einzurichten.

Zuerst habe ich das Verzeichnis erstellt, in dem mein Blog leben würde.

mkdir <my_project_dir>/blog

Ein kleines Vorwort zu den nächsten Schritten: Wenn du auf einem Mac bist und bereits eine native Ruby-Installation hast, lies über die Probleme, auf die ich gestoßen bin, besonders am Ende dieses Beitrags.

Als Nächstes habe ich RVM installiert, da ich Ruby 1.9.3 zusätzlich zu meiner 1.8.7-Installation brauchte:

curl -L get.rvm.io | bash -s stable

Die Installation von LLVM und libksba war der nächste Schritt:

brew install llvm
brew install libksba

Als ich zum ersten Mal versuchte, libksba zu installieren, bekam ich einen Fehler, dass keine Verbindung hergestellt werden konnte. Während ich diesen Artikel polierte, habe ich es noch einmal überprüft, und es funktionierte ohne Probleme.

Als Nächstes Ruby 1.9.3 installieren:

rvm install 1.9.3

Hier bekam ich einen weiteren Fehler:

Error running 'tar xjf /Users/twiss1/.rvm/archives/ruby-1.9.3-p194.tar.bz2 -C /Users/twiss1/.rvm/tmp/rvm_src_78868 ', please read /Users/twiss1/.rvm/log/ruby-1.9.3-p194/extract.log

Die erwähnte Logdatei extract.log zeigte:

ruby-1.9.3-p194/template/encdb.h.tmpl: (Empty error message)
tar: Error exit delayed from previous errors.

Dank dieses Beitrags fand ich eine Lösung:

wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.bz2
mv ruby-1.9.3-p194.tar.bz2 /Users/twiss1/.rvm/archives/
rvm install ruby-1.9.3-p194
rvm use 1.9.3

Ich habe alles mit ruby -v überprüft.

Aber dann hatte ich ein Problem, wann immer ich vagrant benutzen wollte. Eine temporäre Lösung war:

CC=/usr/bin/gcc rvm install 1.8.7 --enable-shared

Nachdem ich mich am nächsten Tag in mein Terminal eingeloggt hatte, konnte ich rvm nur als root benutzen und nicht als mein normaler Benutzer. Selbst als ich versuchte, meine Ruby-Version mit rvm use 1.9.3 zu ändern, bekam ich diesen Fehler:

RVM is not a function, selecting rubies with 'rvm use...' will not work.
You need to change your terminal settings to allow shell login.
Please visit https://rvm.io/workflow/screen/ for example.

Also habe ich source ~/.rvm/scripts/'rvm' zu meinem .bash_profile hinzugefügt, und das hat es behoben.

Was du hier über meine Probleme mit RVM und Ruby liest, war nur die Spitze des Eisbergs, aber es gibt mehr Infos am Ende dieses Beitrags.

Schließlich habe ich Octopress installiert:

git clone https://github.com/imathis/octopress.git octopress
gem install bundler
bundle install
rake install

Für die Einrichtung des Deployments bin ich diesem Artikel gefolgt.

Ich habe Heroku für das Deployment gewählt, da ich ein großer Fan ihrer Dienste und der Idee dahinter bin.

gem install heroku
heroku create
git config branch.master.remote heroku

Jetzt entferne den Eintrag public aus der .gitignore-Datei:

rake generate
git add.
git commit -m "initial commit"
git push heroku master

Beim letzten Schritt bekam ich folgenden Fehler:

Permission denied (publickey).
fatal: The remote end hung up unexpectedly

Okay, das ist einfach - wir müssen ein privates und öffentliches SSH-Schlüsselpaar generieren:

cd ~/.ssh
ssh-keygen -t rsa

Ich habe die Schlüssel als id_rsa.heroku mit einer leeren Passphrase gespeichert.

Zurück in meinem Projektverzeichnis habe ich gemacht:

heroku keys:add ~/.ssh/id_rsa.heroku.pub

Selbst dann schlug das Pushen zu Heroku mit dem gleichen Fehler fehl.

Das Ausführen von ssh-add ~/.ssh/id_rsa.heroku löste das Problem.

Du könntest auch die folgende Zeile hinzufügen:

 IdentityFile ~/.ssh/id_rsa.heroku

zur Datei ~/.ssh/config.

Also, noch einmal git push heroku master - alles funktionierte gut und ich bekam folgende Ausgabe:

Natürlich war ich gespannt, die URL zu sehen.

Da hast du es. Sehr schön!

Jetzt war es Zeit, das an meine Bedürfnisse anzupassen, indem ich die Blog-URL änderte:

heroku apps:rename rampmeupscotty

Lass uns das auf “My Apps” auf Heroku überprüfen.

Cool - das war’s fürs Erste. Die nächsten Schritte waren weitere Konfigurationsänderungen am Blog, indem ich hier weitermachte, und dann habe ich den gesamten Inhalt migriert.

Einige Anmerkungen zu RVM und Ruby

Wie oben erwähnt, als ich Octopress auf meinem Mac installierte, wollte ich vagrant up machen, während ich an einem anderen Projekt arbeitete, aber bekam das:

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems.rb:777:in `report_activate_error': Could not find RubyGem vagrant (>= 0) (Gem::LoadError)
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems.rb:211:in `activate'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems.rb:1056:in `gem'
from /usr/bin/vagrant:18

Ich versuchte, Vagrant erneut mit gem install vagrant zu installieren, aber bekam das:

/Users/twiss1/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/1.8/timeout.rb:60: [BUG] Segmentation fault
ruby 1.8.7 (2012-02-08 patchlevel 358) [i686-darwin11.4.0]

Ohoh - etwas war ziemlich durcheinander. Ich versuchte, es wie folgt zu lösen:

brew remove ruby
rvm remove 1.8.7
CFLAGS="-O2 -fno-tree-dce -fno-optimize-sibling-calls" rvm install 1.8.7
gem install vagrant

Das funktionierte! Moment mal… Ich verließ das Terminal, um etwas anderes zu tun, und als ich zurückkam, hatte ich den gleichen Fehler wieder. Dann versuchte ich:

rvm remove 1.8.7
rvm install 1.8.7 --with-gcc=clang
gem install vagrant
vagrant up

Und wieder, als ich die Terminalsitzung verließ, trat das gleiche Problem auf, das Vagrant-Gem nicht zu finden.

Das Ausführen von

gem list

gab leer zurück, und wieder machte ich:

rvm gem install vagrant

Ich wollte mehr über meine Gems wissen mit rvm 1.9.3 do gem list, was eine lange Liste zurückgab, aber rvm 1.8.7 do gem list gab leer zurück.

Nach etwas Googeln fand ich diesen Artikel, entfernte 1.8.7 mit rvm remove 1.8.7 und ging auch in ~/.rvm und entfernte alles, was “1.8.7” im Dateinamen hatte.

Ich stieß auch auf diesen Beitrag, wo ich über die MacOS-gcc-Situation lernte.

Das war ein Hinweis, und ich überprüfte gcc -v, was zurückgab:

Using built-in specs.
Target: i686-apple-darwin11
Configured with: /private/var/tmp/llvmgcc42/llvmgcc42-2336.9~22/src/configure --disable-checking --enable-werror --prefix=/Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2 --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-prefix=llvm- --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin11 --enable-llvm=/private/var/tmp/llvmgcc42/llvmgcc42-2336.9~22/dst-llvmCore/Developer/usr/local --program-prefix=i686-apple-darwin11- --host=x86_64-apple-darwin11 --target=i686-apple-darwin11 --with-gxx-include-dir=/usr/include/c++/4.2.1
Thread model: posix
gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00)

Einen nicht-LLVM-basierten gcc zu bekommen war als Nächstes dran, dank dieses Beitrags, der sehr half.

mkdir <somewhere>/tmp
curl -O http://opensource.apple.com/tarballs/gcc/gcc-5666.3.tar.gz
tar zxf gcc-5666.3.tar.gz
cd gcc-5666.3
mkdir -p build/obj build/dst build/sym
sudo ditto build/dst /

Eines meiner Probleme, allgemein gesprochen, ist, nicht zu verstehen, was ich tue. Der Befehl

CC=/usr/bin/gcc rvm install 1.8.7 --enable-shared

hätte sein sollen:

CC=/usr/bin/gcc-4.2 rvm install 1.8.7 --enable-shared

Jetzt, wenn ich mache:

rvm use 1.8.7
rvm 1.8.7 do gem list

bekam ich die folgende Liste von Gems:

bundler (1.1.4)
rake (0.9.2.2)
rubygems-bundler (1.0.3)
rvm (1.11.3.4)

Nach:

rvm 1.8.7 do gem install vagrant
rvm 1.8.7 do gem list

bekam ich mehr:

archive-tar-minitar (0.5.2)
bundler (1.1.4)
childprocess (0.3.2)
erubis (2.7.0)
ffi (1.0.11)
i18n (0.6.0)
json (1.5.4)
log4r (1.1.10)
net-scp (1.0.4)
net-ssh (2.2.2)
rake (0.9.2.2)
rubygems-bundler (1.0.3)
rvm (1.11.3.4)
vagrant (1.0.3)

Aus meinem Terminal ausgeloggt, wieder eingeloggt - WOHOOOOOO!

Eine Randnotiz: Wenn einiges oder alles von dem Zeug, das ich hier über Probleme mit RVM und dem LLVM-basierten GCC-Compiler schreibe, chaotisch erscheint, ist das in Ordnung. Nachdem ich versucht hatte, das Problem durch Googeln und Lesen von Artikel nach Artikel zu lösen, probierte ich Dinge aus, ohne sie vollständig zu verstehen, in der Hoffnung, dass das Problem magisch verschwinden würde.

Ich sollte die ganze Prozedur auf einer sauberen macOS-Installation wiederholen, ohne eine native Ruby-Installation, nur mit RVM und einem nicht-LLVM-basierten GCC-Compiler. Fühle dich frei, einen Mac für diesen Zweck zu spenden - ich werde gerne meine Adresse angeben, um deine Spende zu erhalten…

Wie auch immer, ich bin glücklich mit meinem neuen Blog und habe eine Menge gelernt.

Fertig für heute!