Archive for the ‘Rails’ Category

View-Helper im Controller benutzen

Montag, November 17th, 2008

Ich habe die letzten Tage viel Zeit mit einem AJAX-Chat für die Spekunauten verbracht. Dort habe ich mich von .RJS-Templates verabschiedet und erzeuge den meisten View-Code direkt im Controller mit render_to_string.

Für Javascript-Funktionen benötigte ich aber auch oft javascript_escape (bei der Parameterübergabe) und andere Helper, die nur im View zur Verfügung stehen.

Es gibt verschiedene Lösungen, dass zu erreichen. Die unkomplizierteste die ich gefunden habe lautet @template.

Mit @template (ich habe dieses Feature aus einem Kommentar von 2005 gefunden, es scheint also noch aus 1.x-Tagen zu sein) kann man alle Funktionen innerhalb des Views aufrufen, also z.B. @template.escape_javascript!

Veränderte URLs Google mitteilen: Redirect mit 301

Mittwoch, August 20th, 2008

Angenommen man hat schon eine Menge Seiten im Google-Index. Nun möchte man das Schema der URLs dieser Seiten verändern um es beispielsweise ein bisschen SEO zu betreiben.

Die naheliegendste Vorgehensweise dabei wäre, eine neue Action im Controller zu schreiben und von dort aus auf die neue URL umzuleiten:


def some_action_old
redirect_to some_action_url(params[:id])
end

Oder so ähnlich. Für den Besucher sieht das prima aus, denn er sieht nur die neue URL im Browser. Googlebot bekommt beim nächsten Crawl ebenfalls die Weiterleitung mitgeteilt, man könnte daher annehmen er würde ab dann die neue URL speichern. Das wird aber nicht passieren, warum?

redirect_to liefert den Status-Code 302 (Moved temporarily) zurück. Wie der Name schon sagt, gilt diese Umleitung nur vorübergehenderweise- nur für diesen speziellen Seitenaufruf. Im normalen Gebrauch macht das auch Sinn: Angenommen man klickt auf einen Logout-Link, so wird man anschließend zur Startseite umgeleitet. Das bedeutet jedoch nicht, dass ab jetzt die URL der Startseite die gleiche Bedeutung wie die Logout-URL hat.

Für diesen Fall gibt es den Status-Code 301 (Moved permanently). Um diesen zurückzugeben, muss man direkt in den Header zugreifen. (Ich fand diesen Trick über Snippets.dzone.com).


def some_action_old
redirect_to post_url(@post), :status=>301
end

Jetzt wird der Googlebot nach und nach die alten URLs gegen die neuen austauschen. Software zum auswerten der Serverlogs (ich verwende AWStats) zeigt eine Tabelle mit den häufigsten HTTP-Statuscodes an. Dort kann man durch die Zahl der 301-Redirects abschätzen, wie oft dieser Aufruf tatsächlich genutzt wurde.

mysql_stmt_row_tell-Fehler mit Instant-Rails

Donnerstag, August 14th, 2008

Bei einer InstantRails-Installation habe ich heute auf Rails 2.1 geupgraded (es gibt noch keine InstantRails-Version mit vorinstalliertem Rails 2.1).

Beim Start einer Rails-Anwendung und dem ersten Zugriff auf http://localhost:3000 erhielt ich die Fehlermeldung ‘Der Prozedureinsprungpunkt “mysql_stmt_row_tell” wurde in der DLL “LIBMYSQL.dll” nicht gefunden’

Nach kurzem Googlen fand ich die Lösung hier:

Einfach im InstantRails-Verzeichnis die Datei libmysql.dll von <InstantRails>\mysql\bin nach <InstantRails>\ruby\bin kopieren und es geht. Ich weiss nicht ob es speziell mit Rails 2.1 zusammenhängt, aber InstantRails 2 “out-of-the-box” hatte ich dieses Problem nicht.

Ach übrigens, das Upgrade auf Rails 2.1 wird durchgeführt in dem man auf der InstantRails-Konsole “gem rails update” eingibt.