<?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>El blog de Deigote &#187; rails</title>
	<atom:link href="http://blog.deigote.com/tag/rails/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.deigote.com</link>
	<description>El mundo de Deigote. Un diario de cualquier cosa que me resulte interesante (si a alguien más se lo resulta, es otro cantar). Espero que os guste o disguste. Incluso que os deje indiferentes sería una opción tan buena como cualquier otra.</description>
	<lastBuildDate>Wed, 04 Aug 2010 09:55:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>uninitialized constant ApplicationController en Ruby on Rails</title>
		<link>http://blog.deigote.com/2009/07/16/uninitialized-constant-applicationcontroller-en-ruby-on-rails/</link>
		<comments>http://blog.deigote.com/2009/07/16/uninitialized-constant-applicationcontroller-en-ruby-on-rails/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 18:16:16 +0000</pubDate>
		<dc:creator>Deigote</dc:creator>
				<category><![CDATA[Informática, internet y tecnología]]></category>
		<category><![CDATA[application controller]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[upgrade]]></category>

		<guid isPermaLink="false">http://blog.deigote.com/?p=367</guid>
		<description><![CDATA[Es muy posible que si actualizáis de versión de Rails, al levantar la aplicación, os encontréis con el siguiente error:
uninitialized constant ApplicationController
A mi me ocurrió al pasar de Rails 2.2.2 a Rails 2.32. Por lo visto, han cambiado el nombre a una clase de Rails, por lo que es necesario actualizar el código fuente de [...]]]></description>
			<content:encoded><![CDATA[<p>Es muy posible que si actualizáis de versión de Rails, al levantar la aplicación, os encontréis con el siguiente error:</p>
<p><code>uninitialized constant ApplicationController</code></p>
<p>A mi me ocurrió al pasar de Rails 2.2.2 a Rails 2.32. Por lo visto, han cambiado el nombre a una clase de Rails, por lo que es necesario actualizar el código fuente de la aplicación que Rails incluyó en la misma al crearla. El siguiente mandato hará el trabajo:</p>
<p><code>rake rails:update</code></p>
<p>Rápido y fácil, pero me dio unos cuantos quebraderos de cabeza al <a href="http://blog.deigote.com/2009/07/16/ruby-on-rails-passenger-apache-mysql-sqlite-en-debian-5/" title="Rails con Passenger, Apache, MySQL y SQLite en Debian">actualizarme a la última de Rails usando Apache y Passenger</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deigote.com/2009/07/16/uninitialized-constant-applicationcontroller-en-ruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby On Rails + Passenger + Apache + MySQL + SQLite en Debian 5</title>
		<link>http://blog.deigote.com/2009/07/16/ruby-on-rails-passenger-apache-mysql-sqlite-en-debian-5/</link>
		<comments>http://blog.deigote.com/2009/07/16/ruby-on-rails-passenger-apache-mysql-sqlite-en-debian-5/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 18:10:08 +0000</pubDate>
		<dc:creator>Deigote</dc:creator>
				<category><![CDATA[Informática, internet y tecnología]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[lenny]]></category>
		<category><![CDATA[mod_ruby]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[passenger]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[rubygems]]></category>
		<category><![CDATA[sqlite]]></category>

		<guid isPermaLink="false">http://blog.deigote.com/?p=347</guid>
		<description><![CDATA[Cómo instalar Rails y Rubygems, y las gemas más habituales para un entorno de producción basado en MySQL, Apache y Passenger o mod_ruby, en una distribución de tipo Debian (en este caso, Lenny)]]></description>
			<content:encoded><![CDATA[<p>Por motivos que ya saldrán a la luz <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':D' title=':D' class='wp-smiley smiley-2' /> he actualizado mi fantabulosa <a href="http://mybestlap.com" title="My Best Lap">aplicación en Ruby On Rails MyBestLap</a> para que funcione en Ruby On Rails 2.3.2 usando Passenger con Apache 2 en una Debian 5 versión servidora.</p>
<p>Como me ha resultado un pelín farragoso, he decidido publicar los pasos por si alguien se ve en una situación parecida.</p>
<ol>
<li><a href="#instalando-ruby">Instalando Ruby</a></li>
<li><a href="#instalando-rubygems">Instalando Rubygems</a></li>
<li><a href="#instalando-rails">Instalando Rails</a></li>
<li><a href="#instalando-sql">Instalando SQLite y MySQL</a></li>
<li><a href="#instalando-passenger">Instalando Passenger</a></li>
</ol>
<h4 id="instalando-ruby">Instalando ruby</h4>
<p>Personalmente, cuando trabajo con Rails (en realidad, con Ruby en general), prefiero tener una instalación basada en Rubygems en lugar de usar el sistema de paquetes de la distribución. Aunque a priori puede parecer peor, a la larga resulta más cómodo (puedes escoger la versión que necesitas y no dependes de que la gema esté disponible como paquete para tu distro, además de que te permite escoger la versión de Ruby, mientras que las gemas precompiladas sólo suelen estar para la versión estable) y más coherente (ya que, como no todas las gemas están disponibles como paquetes, acabas instalando algunas mediante gem y otras mediante el gestor de paquetes, en mi caso aptitude, siendo más complicado identificar qué tienes instalado.).</p>
<p>Por lo tanto, de momento sólo instalaremos el intérprete de ruby y los paquetes de documentación y la shell interactiva, es decir:</p>
<p><code>sudo aptitude install ruby ri1.8 rdoc1.8 irb1.8</code></p>
<p>Que en Debian 5 por defecto se traduce en la instalación de la versión 1.8 del intérprete (aunque la 1.9 también está disponible). Los siguientes enlaces simbólicos nos serán útiles si el paquete no los ha creado (para verlo, <em>dpkg -L nombre_del_paquete</em>):</p>
<p><code>cd /usr/local/bin<br />
sudo ln -s /usr/bin/irb1.8 irb<br />
sudo ln -s /usr/bin/rdoc1.8 rdoc<br />
sudo ln -s /usr/bin/ri1.8 ri<br />
</code></p>
<h4 id="instalando-rubygems">Instalando rubygems</h4>
<p>Debido a que el paquete rubygems tiene algunas restricciones en Debian que no te permiten usar todas las opciones, y la versión no es la más moderna, optaremos por una instalación a la vieja usanza <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':)' title=':)' class='wp-smiley smiley-19' /> . Aunque asuste, los pasos son realmente sencillos:</p>
<p><code>mkdir tmp<br />
cd tmp<br />
wget http://rubyforge.org/frs/download.php/38646/rubygems-1.2.0.tgz<br />
tar zxvf rubygems-1.2.0.tgz<br />
cd  rubygems-1.2.0<br />
sudo ruby setup.rb<br />
sudo ln -s /usr/bin/gem1.8 /usr/local/bin/gem<br />
gem --version<br />
</code></p>
<p>A continuación, nos aseguramos de que tenemos la última versión de rubygems <a href="#nota-1">(1)</a>, instalando la gema rubygems-update, que sirve para actualizar rubygems (mola <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':D' title=':D' class='wp-smiley smiley-2' /> ):</p>
<p><code>gem list -r | grep update<br />
sudo gem install rubygems-update<br />
sudo update-rubygems<br />
gem --version</code></p>
<p>Como habréis observado, no me he preocupado del <em>path</em> a la hora de lanzar el mandato update-rubygems. Rubygems hace una cosa que bajo mi punto de vista es un gran error, pero que facilita el mantenimiento del path: copia los binarios de cada gema en /usr/bin (primer error, copiarlo a /usr/bin en vez de /usr/local/bin, ya que es una instalación local, segundo error, ¿¿porqué copiar en vez de enlazar simbólicamente??, supongo que la respuesta es que Ruby es multiplataforma y por defecto no permite enlaces simbólicos, como le pasa a Java, aunque quizá sea otra cosa).</p>
<p>A partir de aquí, al instalar algunas gemas (en el ejemplo, sqlite3-ruby), obtendremos un error del tipo</p>
<p><code>Building native extensions.  This could take a while...<br />
ERROR:  Error installing sqlite3-ruby:<br />
ERROR: Failed to build gem native extension.<br />
/usr/bin/ruby1.8 extconf.rb<br />
extconf.rb:1:in `require': no such file to load -- mkmf (LoadError)<br />
	from extconf.rb:1<br />
Gem files will remain installed in /usr/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.4 for inspection.<br />
Results logged to /usr/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.4/ext/sqlite3_api/gem_make.out</code></p>
<p>Esto es debido a que necesitamos las librerías de desarrollo de Ruby, ya que vamos a compilar cada gema. Por tanto, las instalamos como paquete, ya que el interprete también lo hemos instalado de esa manera:</p>
<p><code>sudo aptitude install ruby-dev</code></p>
<h4 id="instalando-rails">Instalando Rails</h4>
<p>El siguiente paso es instalar Rails, con un sencillo gesto de dedos <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':)' title=':)' class='wp-smiley smiley-19' /> :</p>
<p><code>sudo gem install rails</code></p>
<p>Podéis especificar la versión que necesitáis, pero en mi caso he decido ir a por la que se instala por defecto, una moderna Rails 2.3.2.</p>
<h4 id="instalando-sql">Instalando MySQL y SQLite</h4>
<p>Aunque existen otras posiblidades, MySQL y SQL suelen ser los gestores de base de datos usados para la persistencia en una aplicación Rails. Normalmente, SQLite se usa en el entorno de desarrollo y MySQL en el de producción, aunque estoy convencido de que la mayoría de aplicaciones (incluyendo la mía <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':D' title=':D' class='wp-smiley smiley-2' /> ) se apañarían con SQLite (que no pase hambre).</p>
<p>La instalación de ambas gemas es sencilla, aunque requieren instalar algunos paquetes adicionales. Aquí, lo más habitual es instalar todo lo que huela al paquete a instalar (empezaremos por <strong>SQLite</strong>), pero realmente no es necesario, y yo prefiero instalar lo mínimo necesario, sobretodo en un servidor de producción. El truco, valido también para cuando estamos compilando una aplicación Linux (con el clásico configure + make + make install), es instalar los paquetes del tipo lib<em>cosadelaquedependes</em> y lib<em>cosadelaquedependes</em>-dev, que contienen las librerías necesarias para la ejecución y compilación de otros programas o librerías que dependan de <em>cosadelaquedependes</em>.</p>
<p>Así, para SQLite, buscamos la gema que queremos instalar:</p>
<p><code>gem list -r | grep sqlite</code></p>
<p>y nos quedamos con la que tiene el nombre más prometedor, <em>sqlite3-ruby</em> <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':)' title=':)' class='wp-smiley smiley-19' /> . Si la intentamos instalar, posiblemente obtengamos un mensaje similar a:</p>
<p><code>gem install sqlite3-ruby<br />
Building native extensions.  This could take a while...<br />
ERROR:  Error installing sqlite3-ruby:<br />
	ERROR: Failed to build gem native extension.<br />
/usr/bin/ruby1.8 extconf.rb<br />
checking for fdatasync() in -lrt... yes<br />
checking for sqlite3.h... no<br />
make<br />
make: *** No hay ninguna regla para construir el objetivo `ruby.h', necesario para `sqlite3_api_wrap.o'.  Alto.<br />
Gem files will remain installed in /usr/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.4 for inspection.<br />
Results logged to /usr/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.4/ext/sqlite3_api/gem_make.out</code></p>
<p>Si os fijáis, le falta el fichero sqlite3.h, es decir, un fichero de cabeceras del lenguaje C. Por lo que procedemos a realizar el truco antes mencionado, comprobando antes y después si tenemos o no el fichero sqlite3.h:</p>
<p><code>dpkg -S sqlite3.h<br />
sudo aptitude install libsqlite3-dev<br />
dpkg -S sqlite3.h<br />
gem install sqlite3-ruby<br />
</code></p>
<p>Tras esto, la gema SQLite debería instalarse sin problemas. Para <strong>MySQL</strong>, la instalación es análoga:</p>
<p><code>gem list -r | grep mysql<br />
gem install mysql<br />
Building native extensions.  This could take a while...<br />
ERROR:  Error installing mysql:<br />
ERROR: Failed to build gem native extension.<br />
/usr/bin/ruby1.8 extconf.rb<br />
checking for mysql_query() in -lmysqlclient... no<br />
checking for main() in -lm... yes<br />
checking for mysql_query() in -lmysqlclient... no<br />
checking for main() in -lz... no<br />
checking for mysql_query() in -lmysqlclient... no<br />
checking for main() in -lsocket... no<br />
checking for mysql_query() in -lmysqlclient... no<br />
checking for main() in -lnsl... yes<br />
checking for mysql_query() in -lmysqlclient... no<br />
*** extconf.rb failed ***<br />
Could not create Makefile due to some reason, probably lack of<br />
necessary libraries and/or headers.  Check the mkmf.log file for more<br />
details.<br />
Gem files will remain installed in /usr/lib/ruby/gems/1.8/gems/mysql-2.7 for inspection.<br />
Results logged to /usr/lib/ruby/gems/1.8/gems/mysql-2.7/gem_make.out<br />
</code></p>
<p>Buscando e instalando la librería adecuada, no deberíamos tener ningún problema:</p>
<p><code>aptitude search mysql | grep lib | grep dev<br />
aptitude install libmysql++-dev<br />
gem install mysql<br />
</code></p>
<h4 id="instalando-passenger">Instalando y configurando Passenger</h4>
<p>La instalación de Passenger es trivial, aunque por defecto no se explica cómo configurarlo a la Debian, si no que se sólo se habla de Apache en general (lógico por otra parte). Necesitáis los siguientes mandatos:</p>
<p><code>sudo gem install passenger<br />
sudo passenger-install-apache2-module</code></p>
<p>El primero de ellos instala la gema, mientras que el segundo compila el módulo para Apache. Es probable que no funcione a la primera y os pida que instaléis una serie de paquetes de Apache (algunas librerías de desarrollo y similar), pero con seguir las instrucciones no debería dar mayor problema. En mi caso fueron los siguientes paquetes:</p>
<p><code>aptitude install build-essential libopenssl-ruby apache2-prefork-dev libapr1-dev libaprutil1-dev</code></p>
<p>Una vez instalado, Passenger nos indicará <a href="http://www.modrails.com/documentation/Users%20guide%20Apache.html#_deploying_to_a_virtual_host_8217_s_root">cómo configurar una aplicación en un virtualhost</a>, así como las líneas a añadir a la configuración de Apache. Sin embargo, ya que estamos, en Debian, lo mejor es <em>hacerlo a la Debian</em> y crearnos el fichero <em>/etc/apache2/mods-available/passenger.load</em> con la ruta al módulo de Apache que Passenger nos facilita al final de la instalación:</p>
<p><code>LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.4/ext/apache2/mod_passenger.so</code></p>
<p>y su correspondiente <em>/etc/apache2/mods-available/passenger.conf</em> con la configuración del módulo:</p>
<p><code>PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.4<br />
PassengerRuby /usr/bin/ruby1.8</code></p>
<p>El <em>virtual host</em> no tiene ningún misterio, en mi caso por ejemplo edito el fichero /etc/apache2/sites-available/mybestlap.com con el siguiente contenido:</p>
<p><code>ServerName mybestlap.com<br />
DocumentRoot /opt/websites/mybestlap/public<br />
ErrorLog /var/log/apache2/error_mybestlapcom.log<br />
LogLevel warn<br />
CustomLog /var/log/apache2/access_mybestlap.com.log combined<br />
</code></p>
<p>Depués sólo queda habilitar el módulo y el site, y reiniciar Apache</p>
<p><code>sudo a2enmod passenger<br />
sudo a2ensite mybestlap.com<br />
sudo /etc/init.d/apache2 restart</code></p>
<p>Y ya tenemos nuestra aplicación lista para salir a producción. Ahora queda lo más diver, implementarla :D. <em>Happy coding!</em></p>
<p><span id="nota-1">(1)</span> También se puede instalar directamente una versión más moderna de Rubygems, pero prefería cubrir el caso descrito, que es el que yo hice y que tenía algo más de miga.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deigote.com/2009/07/16/ruby-on-rails-passenger-apache-mysql-sqlite-en-debian-5/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails: link_to_remote sin Javascript (noscript)</title>
		<link>http://blog.deigote.com/2007/11/13/ruby-on-rails-link_to_remote-sin-javascript-noscript/</link>
		<comments>http://blog.deigote.com/2007/11/13/ruby-on-rails-link_to_remote-sin-javascript-noscript/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 18:35:30 +0000</pubDate>
		<dc:creator>Deigote</dc:creator>
				<category><![CDATA[Informática, internet y tecnología]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[degradation]]></category>
		<category><![CDATA[gracefull]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[noscript]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[remote]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://deigote.com/blog/2007/11/13/ruby-on-rails-link_to_remote-sin-javascript-noscript/</guid>
		<description><![CDATA[Bueno, tras este confuso título se esconde un pequeño truco que me ha costado horrores encontrar. Estoy usando el framework Ruby On Rails para un proyecto personal y he decidido que ya soy mayor y puedo usar Ajax. El problema es que tuve una asignatura, Diseño Web Accesible, que corrompió mi mente para siempre y [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno, tras este confuso título se esconde un pequeño truco que me ha costado horrores encontrar. Estoy usando el <em>framework</em> Ruby On Rails para un proyecto personal y he decidido que ya soy mayor y puedo usar Ajax. El problema es que tuve una asignatura, Diseño Web Accesible, que corrompió mi mente para siempre y ahora me ando preocupando de si el navegador tiene o no Javascript y zarandajas así <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':roll:' title=':roll:' class='wp-smiley smiley-17' /> .</p>
<p>La función <em>link_to_remote</em> proporciona la posibilidad de incluir un enlace que usa Javascript y XMLHttpRequest (es decir, Ajax <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':razz:' title=':razz:' class='wp-smiley smiley-15' /> ), pero si el navegador no dispone de Javascript o lo tiene desactivado, el enlace queda inútil, y no es lo más deseable sobretodo si ese enlace no tiene que usar Ajax <em>por narices</em>, aunque usarlo mejora la eficiencia y la experiencia del usuario.</p>
<p>Sin más preámbulos, os dejo un código de ejemplo de la función en la cuál se genera un enlace normal o uno tipo Ajax según la disponibilidad de Javascript en el navegador:</p>
<pre><code>&lt;%= link_to_remote _("login"), {
   :url =&gt; {:controller =&gt; "account", :action =&gt; "login", :layout =&gt; "false"}, # If JS
   :update =&gt; "content",
   :loading =&gt; "new Effect.Appear('loading_message', { duration: 0.5} ); ",
   :complete =&gt; "new Effect.Fade('loading_message', { duration: 0.3 }); " },
   :href  =&gt; url_for(:controller =&gt; "account", :action =&gt; "login") # If no JS
%&gt;
</code></pre>
<p>Las líneas interesantes son la segunda y la última. La segunda especifica la acción para Javascript, mientras que la última especifica el destino del enlace cuando no existe Javascript. Ambas opciones ejecutan la acción <em>login</em> sobre el controlador <em>account</em>. La opción layout que se usa en caso de tener <em>Javascript</em> indica al método que no genere el HTML general que rodea al formulario (es decir, la cabecera de la página, el pié, etcétera) ya que sólo se va a recargar el contenido (como se ve en la opción :<em>update</em>). En el caso del enlace sin Javascript, sí necesitamos dicho HTML ya que se recargará la página completa.</p>
<p><strong>Edito</strong>: Recomiendo encarecidamente que si has llegado hasta aquí usando Google leas <a title="Ruido Blanco: Mira mamá! sin Javascript!" href="http://ruido-blanco.net/blog/archivos/2007/03/15/rails-%c2%a1mira-mama-%c2%a1sin-javascript">esta entrada</a> del blog Ruido Blanco que nos apunta su creador en un comentario. Tanto el contenido de la entrada como las posteriores aclaraciones de los comentarios me han ayudado muchísimo a comprender cómo funciona Rails y incluso el protocolo HTTP <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':smile:' title=':smile:' class='wp-smiley smiley-19' /> </p>
<p>Fuente (madrecita lo que me ha costado encontrarla <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':lol:' title=':lol:' class='wp-smiley smiley-10' /> ): <a title="Changeset 8100. Rails Track" href="http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html#M000533">Rails Track</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deigote.com/2007/11/13/ruby-on-rails-link_to_remote-sin-javascript-noscript/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
