Note to self: Rails 2.3-Helper Object#try

Juni 9th, 2010

Oh je, beinahe 1 Jahr kein Update mehr auf diesem Blog. Aber das ist wohl eine andere Geschichte.

Hier ein kurzes Posting, hauptsächlich für mich selbt. Ich hatte diesen hilfreichen Helper schon einmal entdeckt, aber konnte mich dann nicht mehr an den Namen erinnern.

In Ruby ist es ja ein beliebtes Idiom mittels dem “||”-Operator nil-Werte abzufangen, z.B. @name || “default”.

Dieser Ausdruck liefernt entweder @name oder den String “default”, sollte @name == nil sein.

In Rails möchte man in Views häufig Model-Attribute ausgeben, welche ja als Methoden verfügbar sind. Kann das Model aber auch mal nil sein, kommt man mit dem ||-Idiom nicht weit. Rails 2.3 hat dazu Object#try als Monkey-Patch eingeführt:

@user.try(:name) || "(no name)"

hat den gleichen Effekt wie


@user ? @user.name || "(no name)" : "(no name)"

Sehr praktisch!

(Related: http://ozmm.org/posts/try.html)

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.