<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ich bin root &#187; ruby on rails</title>
	<atom:link href="http://ichbinroot.de/tag/ruby-on-rails/feed/" rel="self" type="application/rss+xml" />
	<link>http://ichbinroot.de</link>
	<description>ich darf das!</description>
	<lastBuildDate>Fri, 13 Jan 2012 13:49:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Liste der verfügbaren Controller in Ruby On Rails</title>
		<link>http://ichbinroot.de/2007/02/liste-der-verfugbaren-controller-in-ruby-on-rails/</link>
		<comments>http://ichbinroot.de/2007/02/liste-der-verfugbaren-controller-in-ruby-on-rails/#comments</comments>
		<pubDate>Wed, 07 Feb 2007 16:56:56 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[codeschnipsel]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://ichbinroot.de/?p=11</guid>
		<description><![CDATA[Alle verfügbaren Controller in einer Rails-Anwenung stehen im Array ActionController::Routing.possible_controllers Diese Liste enthält neben den eigenen Controllern auch 2 Rails-Controller rails_inforails/info]]></description>
			<content:encoded><![CDATA[<p>Alle verfügbaren Controller in einer Rails-Anwenung stehen im Array</p>
<pre>ActionController::Routing.possible_controllers</pre>
<p>Diese Liste enthält neben den eigenen Controllern auch 2 Rails-Controller</p>
<pre>rails_inforails/info</pre>
]]></content:encoded>
			<wfw:commentRss>http://ichbinroot.de/2007/02/liste-der-verfugbaren-controller-in-ruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Normalised data is for sissies oder &#8220;Who is online?&#8221; mit RoR Teil 3</title>
		<link>http://ichbinroot.de/2006/12/normalised-data-is-for-sissies-oder-who-is-online-mit-ror-teil-3/</link>
		<comments>http://ichbinroot.de/2006/12/normalised-data-is-for-sissies-oder-who-is-online-mit-ror-teil-3/#comments</comments>
		<pubDate>Fri, 08 Dec 2006 10:22:02 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://ichbinroot.de/?p=8</guid>
		<description><![CDATA[Viele Leute haben mir gesagt, die UserId in der Session-Tabelle zu speichern wäre der falsche Ansatz. Unsauber, nicht den Normalformen entsprechend, usw. Sie empfehlen ein Feld is_online zur Tabelle users hinzuzufügen. Ich bin anderer Meinung. Abgelaufene Sessions Sessions sind etwas flüchtiges. Wenn ein Benutzer auf unsere Seite kommt bekommt er ein Cookie mit seiner SessionId. [...]]]></description>
			<content:encoded><![CDATA[<p>Viele Leute haben mir gesagt, die <a href="6-Who-is-online-mit-RubyOnRails.html" mce_href="6-Who-is-online-mit-RubyOnRails.html" title="Who is online? mit RubyOnRails">UserId in der Session-Tabelle</a> zu speichern wäre der falsche Ansatz. Unsauber, nicht den <a href="http://de.wikipedia.org/wiki/Normalisierung_%28Datenbank%29" mce_href="http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)">Normalformen</a> entsprechend, usw. Sie empfehlen ein Feld <i>is_online</i> zur Tabelle <i>users</i> hinzuzufügen. Ich bin anderer Meinung.</p>
<p><span id="more-8"></span><br />
<h3>Abgelaufene Sessions</h3>
<p> Sessions sind etwas flüchtiges. Wenn ein Benutzer auf unsere Seite kommt  bekommt er ein Cookie mit seiner SessionId. Er loggt sich ein und wir speichern seine UserId in der Session-Tabelle &#8211; damit wird er als <i>online</i> angezeigt. Er surft etwas auf unserer Seite bis es ihm zu langweilig wird. Dann schließt er seinen Browser und das Expiration-Handling unserer Sessions löscht irgendwann seine Session aus der Tabelle. Damit wird er wieder als <i>offline</i> angezeigt.</p>
<p>Merken wir uns den Online-Status der Benutzer über ein Feld in der Tabelle <i>users</i>, müssen wir das Expiration-Handling doppelt machen. Dass heißt im Klartext das Feld <i>is_online</i> durch <i>last_activity</i> zu ersetzen welches den Zeitpunkt des letzten Zugriffs speichert. Dieses Feld müssen wir nun bei jedem Request aktualisieren.</p>
<h3>Schreiben und Lesen geht nicht gleichzeitig</h3>
<p> Für unsere &#8220;Wer ist online?&#8221;-Anzeige fragen wir bei jedem Request die Datenbank, welche Benutzer gerade online sind. Dazu kommen noch weitere lesende Abfragen weil wir z.B. Kommentare der Benutzer anzeigen und dafür den Benutzernamen oder andere Daten aus der User-Tabelle brauchen. Wahrscheinlich werden wir die User-Tabelle ziemlich häufig abfragen müssen für unsere tolle &#8220;Web 2.0 (beta!)&#8221;-Anwendung &#8211; schließlich ist der User bei <i>user generated content</i> ziemlich wichtig. Falls wir uns den Online-Status über die Tabelle <i>users</i> merken, kommt dazu auch noch jeweils ein schreibender Zugriff auf den Benutzer pro Request. Bei 5 Usern geht das bestimmt super. Bei 50 auch. Bei 500, 5000 oder 50000 sicherlich nicht mehr. Schreiben dauert, denn es muss alles gleich direkt auf die Festplatte geschrieben werden. Lesen würde eigentlich ganz schnell gehen, unser dicker Datenbank-Server hat hoffentlich genug RAM um viel zu cachen. Nur leider werden die Zeilen(InnoDB) bzw. die ganze Tabelle(MyISAM) für Schreibvorgänge gelockt. </p>
]]></content:encoded>
			<wfw:commentRss>http://ichbinroot.de/2006/12/normalised-data-is-for-sissies-oder-who-is-online-mit-ror-teil-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>@session.model und Tests oder &#8220;Who is online?&#8221; mit RoR Teil 2</title>
		<link>http://ichbinroot.de/2006/12/session-model-und-tests-oder-who-is-online-mit-ror-teil-2/</link>
		<comments>http://ichbinroot.de/2006/12/session-model-und-tests-oder-who-is-online-mit-ror-teil-2/#comments</comments>
		<pubDate>Fri, 08 Dec 2006 09:09:53 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://ichbinroot.de/?p=7</guid>
		<description><![CDATA[Wer meinen Artikel &#8220;Who is online?&#8221; mit RubyOnRails gelesen hat und das ganze gleich selbst ausprobieren wollte, stand vor einem Problem: Tests. Da wir alle ganz brave Entwickler sind, haben wir natürlich die entsprechenden Tests gleich nach dem Einbau erweitert bzw. neue geschrieben. Leider wird bei Tests kein gewöhnlicher Session-Handler genutzt, sondern ActionController::TestSession. Diesem fehlt [...]]]></description>
			<content:encoded><![CDATA[<p>Wer meinen Artikel <a href="6-Who-is-online-mit-RubyOnRails.html" mce_href="6-Who-is-online-mit-RubyOnRails.html" title="Who is online? mit RubyOnRails">&#8220;Who is online?&#8221; mit RubyOnRails</a> gelesen hat und das ganze gleich selbst ausprobieren wollte, stand vor einem Problem: <a href="http://manuals.rubyonrails.com/read/chapter/20" mce_href="http://manuals.rubyonrails.com/read/chapter/20">Tests</a>.</p>
<p><span id="more-7"></span>
<p>Da wir alle ganz brave Entwickler sind, haben wir natürlich die entsprechenden Tests gleich nach dem Einbau erweitert bzw. neue geschrieben. Leider wird bei Tests kein gewöhnlicher Session-Handler genutzt, sondern ActionController::TestSession. Diesem fehlt aber das model-Attribut von ActiveRecordStore, so dass wir Fehler um die Ohren geworfen kriegen, wenn wir auf @session.model zugreifen.<code>NoMethodError: undefined method `model' for #&lt;ActionController::TestSession:0xb7490a18&gt;</code></p>
<p>Tieg <a href="http://blog.12spokes.com/articles/2006/05/12/problem-testing-with-activerecord-session" mce_href="http://blog.12spokes.com/articles/2006/05/12/problem-testing-with-activerecord-session" title="Problem testing with ActiveRecord session">beschreibt</a> in einem Beitrag in dem Blog von <a href="http://blog.12spokes.com" mce_href="http://blog.12spokes.com">12 Spokes</a> eine mögliche Lösung. Folgendes muss in die Datei test_helper.rb eingefügt werden:<br />
<code>class SessionModel<br />
&nbsp;&nbsp;def user_id= *arguments<br />
&nbsp;&nbsp;end<br />
&nbsp;&nbsp;def self.delete_all *arguments<br />
&nbsp;&nbsp;end<br />
end</p>
<p>class ActionController::TestSession<br />
&nbsp;&nbsp;def model<br />
&nbsp;&nbsp;&nbsp;&nbsp;@model ||= SessionModel.new<br />
&nbsp;&nbsp;end<br />
end</code></p>
]]></content:encoded>
			<wfw:commentRss>http://ichbinroot.de/2006/12/session-model-und-tests-oder-who-is-online-mit-ror-teil-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Who is online?&#8221; mit RubyOnRails</title>
		<link>http://ichbinroot.de/2006/12/who-is-online-mit-rubyonrails/</link>
		<comments>http://ichbinroot.de/2006/12/who-is-online-mit-rubyonrails/#comments</comments>
		<pubDate>Fri, 08 Dec 2006 07:17:35 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://ichbinroot.de/?p=6</guid>
		<description><![CDATA[Oft will man auf seiner Website anzeigen, welche Mitglieder gerade online sind. Courtenay beschreibt einen Lösungsweg in seinem Blog. Hier nochmal etwas aktueller und auf Deutsch. Umstellen auf Datenbank-Sessions Falls noch nicht geschehen, muss der SessionStore umgestellt werden, so dass die Sessions in der Datenbank gespeichert werden anstatt im Dateisystem. Zuerst erstellen wir die nötige [...]]]></description>
			<content:encoded><![CDATA[<p>Oft will man auf seiner Website anzeigen, welche Mitglieder gerade online sind. Courtenay beschreibt einen <a href="http://habtm.com/articles/2005/12/15/whos-online" mce_href="http://habtm.com/articles/2005/12/15/whos-online" title="Who's online?">Lösungsweg</a> in seinem Blog. Hier nochmal etwas aktueller und auf Deutsch.</p>
<p><span id="more-6"></span><br />
<h3>Umstellen auf Datenbank-Sessions</h3>
<p> Falls noch nicht geschehen, muss der SessionStore umgestellt werden, so dass die Sessions in der Datenbank gespeichert werden anstatt im Dateisystem. Zuerst erstellen wir die nötige Session-Tabelle mit:<br />
<code>rake create_sessions_table</code><br />
Anschließend müssen wir dem ActionController noch mitteilen, dass wir den ActiveRecordStore für unsere Sessions nutzen wollen. Dazu editieren wir config/environment.rb und Ändern oder Ergänzen diese Zeile:<br />
<code>config.action_controller.session_store = :active_record_store</code></p>
<h3>Erstellen des Models</h3>
<p> Jetzt brauchen wir noch ein Model, damit wir auch auf die Sessions zugreifen können. Ich habe es der Einfachheit halber <i>Session</i> genannt: <code>script/generate model session</code><br />
Wir editieren dieses Model anschließend gleich, und tragen die Assoziation zur Benutzer-Tabelle ein: <code>class Session &lt; ActiveRecord::Base<br />
&nbsp;&nbsp;belongs_to :user<br />
end<br />
</code></p>
<h3>Session-Tabelle modifizieren</h3>
<p> Die Session-Tabelle benötigt nun noch ein Feld, in dem wir die Id des Benutzers speichern können. Dazu erstellen wir eine Migration: <code>script/generate migration add_user_to_sessions</code><br />
In diese Migration fügen wir folgendes ein: <code>add_column :sessions, :user_id, :integer</code></p>
<h3>Die UserId setzen</h3>
<p> Wenn sich ein Benutzer einloggt, müssen wir seine UserId  setzen. Der ActiveRecordStore für Sessions erlaubt einen Zugriff auf die genutzte Tabelle über <i>@session.model</i>: <code>@session.model.user_id = @session[:user_id]</code></p>
<h3>Anzeigen, wer online ist</h3>
<p> <code>@users_online = Session.find(:all, :conditions =&gt; ['sessions.updated_at &gt; ? AND NOT ISNULL(sessions.user_id)', Time.now - 5.minutes], :include =&gt; :user)</code></p>
]]></content:encoded>
			<wfw:commentRss>http://ichbinroot.de/2006/12/who-is-online-mit-rubyonrails/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

