Lösung für “undefined method ‘require_gem’ for main:Object (NoMethodError)”

Juni 17th, 2009

Auf meinem Server streikte rake. Ich bin mir nicht sicher, ob das vielleicht immer schon war und ich es nur nicht verwendet habe (benutze eigentlich Capistrano für alle Aufgaben). Ich möchte die Lösung jedenfalls nicht hinter dem Berg halten und nehme es zum Anlass auf diesem verstaubten Blog mal wieder einen Beitrag zu veröffentlichen.

Der Aufruf von rake wurde immer mit

/var/lib/gems/1.8/bin/rake:17: undefined method `require_gem' for main:Object (NoMethodError)

quittiert. Nach kurzer Suche fand ich die Lösung für ein ähnliches Problem. Anstelle von rails nimmt man sich hier einfach rake vor (auf meinem Debian-Server unter /var/lib/gems/1.8/bin/rake zu finden) und tauscht dort in Zeile 17 “gem_require” gegen “gem” aus.

Das funktioniert… was allerdings die eigentliche Ursache für das Problem ist, bleibt unklar. Wer einen Fix kennt, ohne am rake-Quelltext rumzupfuschen, ist willkommen zu kommentieren!

Ajax-Push mit “Apuq”: Mein Vortrag auf dem Barcamp Ruhr 2

März 29th, 2009

Heute habe ich auf dem Barcamp Ruhr 2 meinen ersten Vortrag gehalten. Es ging um eine Ajax-Push-Lösung (ich habe es Apuq genannt- Ajax PUsh Queue). Apuq ist ein Ruby-Server der eine Schnittstelle zum Browser und zur Webanwendung bereit stellt und Ajax-Requests des Browsers entgegennimmt.

Ich werde dazu später nochmal die Folien online stellen (und vielleicht die Demo)- Sinn der Sache ist der, dem Browser mit minimaler Verzögerung (< 1s) Nachrichten schicken zu können, die dort per Javascript verarbeitet werden (z.B. für einen Chat).

Ich schreibe diesen Artikel eher als Anlaufstelle für die Zuhörer. Ich habe ja viel Feedback über ähnliche und andere Lösungen für das Ajax-Push-Problem bekommen (Dank an @captainhagbard, @sippndipp u.a. die ich nicht mehr tracken konnte [korrigiert mich, wenn die Namen falsch waren]) Ich werde weiter an “Apuq” arbeiten (da ich es auch beruflich benötige). Am vielversprechendsten schien mir da der Hinweis von @moeffju, eine webbasierte Jabber-Lösung einzusetzen. Mehr als die entsprechenden Keywords notieren konnte ich aber in der Richtung noch nicht.

Wenn ihr euch für die weitere Entwicklung des Projekts interessiert dann verfolgt doch einfach die Kommentare zu diesem Artikel. Ich werde dort Updates posten, wenn es Neuigkeiten zur Entwicklung gibt.

RubyGems: –no-ri und –no-rdoc als Vorgabe

März 18th, 2009

Beim Installieren neuer Gems erstellt RubyGems automatisch RDoc und Ri-Dateien. RDoc erzeugt eine Dokumentation aus den im Quelltext enthaltenen Kommentaren über Klassen- und Methodensignaturen.

Ob das in Zeiten von Flatrates und Google sinnvoll ist, muss jeder selbst entscheiden. Vorteilhaft ist der schnellere Zugriff (unter Ubuntu befinden sich die Dateien in /usr/lib/ruby/gems/1.8/doc), nachteilig das (einmalige) lange Parsing bei der Installation.

RDoc-Erzeugung ausschalten

Die Erzeugung der lokalen Dokumentation kann mit den zusätzlichen Paramtern –no-ri und –no-rdoc für den gem-Befehl unterbunden werden. Häufig begegne ich diesen Parametern auch in Installations-Anleitungen für Gems. Daraus schließe ich mal, das ich nicht der einzige bin, den die Standardeinstellung nicht zufriedenstellt, schließlich beansprucht die RDoc-Erzeugung oft 95% der gesamten Installationszeit.

Lästig also, wenn man –no-rdoc und –no-ri mal wieder vergisst, wenn man gerade das Rails-Framework updaten möchte. Ebenso lästig, dass man –no-rdoc und –no-ri überhaupt eintippen muss!

Keine RDoc-Erzeugung als Standard setzen

Es gibt jedoch Abhilfe: gem liest Parameter automatisch aus der Datei $HOME/.gemrc ein

legt man also die Datei .gemrc in seinem Heimatverzeichnis an, und fügt dort die Zeile

gem: –no-ri –no-rdoc

hinzu, werden diese beiden Parameter jeweils automatisch benutzt. Selbst wer die die lokale Dokumentation auf seinem Entwicklungsrechner haben möchte, sollte diese Datei zumindest auf seinem Server anlegen.

Diese Information habe ich in der RubyGems-Dokumentation gefunden, wo noch mehr Optionen aufgeführt sind.

Bonus-Tipp:

APIdoc.com ist eine aufgebohrte Alternative zur offiziellen Dokumentation von Rails. APIdoc.com stellt nicht nur einfachen Zugriff auf ältere Versionen her sondern ermöglicht auch Kommentare (wie z.B. in der PHP-Doku). Neben Rails sind ist dort auch die Dokumentation für Ruby selbst und RSpec zu finden.