Daniel's Blog

Ruby-Dokumentation

Ich denke jedem sind diese Meldungen beim Installieren von Gems schon aufgefallen:

Installing ri documentation for haml-3.0.11...
Installing RDoc documentation for haml-3.0.11...

Was es damit auf sich hat, werde ich jetzt erklären.

RDoc

RDoc ist ein webbasiertes Betrachtungssystem für die Dokumentation.

Wenn man den Dokumentations-Server mittels gem server gestartet hat, kann man die Liste aller Gems unter der Internetadresse http://localhost:8808/ betrachten. Die Dokumentation einzelner Gems lässt sich dann mit einem Klick auf [rdoc] ansehen.

ri

ri ist ein konsolenbasiertes Zugriffstool (quasi man für Ruby).

Der Aufruf erfolgt mittels ri klasse oder ri funktion. Wenn der Funktionsname alleine nicht eindeutig ist, muss man ri klasse.funktion benutzen.

Beispiele:

$ ri link_to                                # Zugriff auf eine Funktion
$ ri ActionView::Helpers::UrlHelper.link_to # dasselbe wie oben
$ ri Fixnum                                 # Zugriff auf eine Klasse

Dokumentation deaktivieren

Da das Erstellen der Dokumentation viel Zeit in Anspruch nimmt, kann man das Erstellen auch deaktivieren, wenn man keine Dokumentation benötigt (z.B. auf dem Server).

Einmalig ist dies möglich, indem man gem --no-rdoc --no-ri install ... aufruft.

Für eine dauerhafte Lösung muss man die ~/.gemrc bzw. /root/.gemrc um folgende Zeile ergänzen:

gem: --no-rdoc --no-ri

Sitemap für Enki

Um meinen Blog für Google besser durchsuchbar zu machen (Stichwort Suchmaschinenoptimierung ), hab ich beschlossen eine Sitemap zu basteln.

Eine Sitemap ist eine XML-Datei die alle (zu indizierenden) Seiten der Webseite mit zusätzlichen Informationen wie dem Änderungsdatum enthält.

Es gibt Programme die eine Webseite automatisiert durchsuchen und eine Sitemap erstellen, aber solche Tools halte ich nur für eine Notlösung: Es werden alle Seiten in die Sitemap aufgenommen (also auch Übersichtsseiten) und diese Tools können das Änderungsdatum der Seiten nicht erfassen und somit muss Google bei jedem Besuch die komplette Seite neu durchsuchen.

Es muss also eine eigene Lösung her:

Ich hab die Sitemap-Action im Post-Controller angesiedelt.
Der Controller-Code hat keine andere Aufgabe, als alle Posts und Pages aus der Datenbank zu holen und den entsprechenden View aufzurufen:

app/controllers/posts_controllers.rb

1   def sitemap
2     @posts = Post.all
3     @pages = Page.all
4     render :action => "sitemap.xml.builder", :layout => false
5   end

Die View ist etwas umfangreicher, sollte aber leicht verständlich sein, wenn man sich die offizielle Spezifikation anguckt.

app/views/posts/sitemap.xml.builder

 1 xml.instruct!
 2 
 3 xml.urlset "xmlns" => "http://www.google.com/schemas/sitemap/0.84" do
 4   @posts.each do |post|
 5     xml.url do
 6       xml.loc post_path(post, :only_path => false)
 7       xml.lastmod post.lastmod.iso8601
 8     end
 9   end
10 
11   @pages.each do |page|
12     xml.url do
13       xml.loc "http://#{request.host_with_port}/pages/#{page.slug}"
14       xml.lastmod page.updated_at.iso8601
15     end
16   end
17 end

Nun muss noch die entsprechende Route hinzugefügt werden:

config/routes.rb

1 map.sitemap '/sitemap.xml', :controller => "posts", :action => "sitemap"

Die lastmod-Funktion im Post-Model gibt entweder die letzte Modifikation des Posts oder des letzten Kommentars zurück.

app/models/post.rb

1   def lastmod
2     if self.approved_comments.count == 0 || self.approved_comments.last.updated_at < self.updated_at
3       return self.updated_at
4     end
5     self.approved_comments.last.updated_at
6   end

Nun muss die Sitemap nur noch in die robots.txt eingetragen werden, damit sie auch von Google gefunden wird.

public/robots.txt

1 Sitemap: http://blog.schaeufele.org/sitemap.xml

Fertig ist die Sitemap…

Herzlich willkommen

Herzlich willkommen zu meinem Blog.

Hier möchte ich meine Gedanken zu Programmierung, IT-Security , meinem Studium am Hasso-Plattner-Institut und Politik niederschreiben.

Dieses Blog läuft unter einem leicht modifizierten enki, die Templates sind aber komplett mit HAML neu geschrieben. Demnächst werde ich aber noch weitere Features einbauen.

Ich hab mich dafür entschieden ein Layout zu basteln, dass auf XHTML5 und CSS3 aufsetzt und komplett ohne Bilder auskommt. Um alle erweiterten Effekte anzeigen zu können, ist Firefox 3.6 oder eine neuere Version eines webkit-Browsers (z.B. Safari 4.0 oder Chrome 4.0) nötig. Benutzbar sollte die Seite allerdings mit praktisch allen Browsern sein. Nur der Internet Explorer weigert sich standhaft die Webseite anzuzeigen und ist komplett inkompatibel mit XHTML5.

Bei Gelegenheit werd ich auch nochmal etwas zu dem Thema CSS3 und XHTML5 schreiben.