<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Javier Vidal Postigo » ruby, rails</title>
	
	<link>http://javiervidal.net</link>
	<description>internet, desarrollo, diseño web, sysadmin</description>
	<pubDate>Mon, 08 Mar 2010 18:30:21 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/javiervidal_ruby_rails" /><feedburner:info uri="javiervidal_ruby_rails" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>EuRuKo 2009 en Barcelona</title>
		<link>http://feedproxy.google.com/~r/javiervidal_ruby_rails/~3/V7VfIQ6vivI/</link>
		<comments>http://javiervidal.net/euruko-2009-barcelona/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 12:02:22 +0000</pubDate>
		<dc:creator>Javier Vidal Postigo</dc:creator>
		
		<category><![CDATA[eventos]]></category>

		<category><![CDATA[ruby, rails]]></category>

		<category><![CDATA[2009]]></category>

		<category><![CDATA[barcelona]]></category>

		<category><![CDATA[euruko]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://javiervidal.net/?p=272</guid>
		<description><![CDATA[Los próximos 9 y 10 de mayo de 2009 se celebrará en Barcelona la EuRuKo 2009, es decir, la conferencia europea de Ruby.



Si estás interasado en asistir, apúntate rápidamente, ya que creo que las plazas van a volar. El calendario de ponencias promete bastante. La keynote de apertura estará a cargo de Yukihiro Matsumoto, el [...]]]></description>
			<content:encoded><![CDATA[<p>Los próximos 9 y 10 de mayo de 2009 se celebrará en Barcelona la <a href="http://www.euruko2009.org/" onclick="javascript:urchinTracker ('/outbound/article/www.euruko2009.org');">EuRuKo 2009</a>, es decir, la conferencia europea de <a href="http://www.ruby-lang.org/es/" onclick="javascript:urchinTracker ('/outbound/article/www.ruby-lang.org');">Ruby</a>.</p>
<p align="center">
<a href="http://www.euruko2009.org/" onclick="javascript:urchinTracker ('/outbound/article/www.euruko2009.org');"><img src='http://farm4.static.flickr.com/3540/3343313267_f3df5a92b8_o_d.png' alt='euruko 2009' /></a>
</p>
<p>Si estás interasado en asistir, apúntate rápidamente, ya que creo que las plazas van a volar. El <a href="http://app.euruko2009.org/calendar" onclick="javascript:urchinTracker ('/outbound/article/app.euruko2009.org');">calendario de ponencias</a> promete bastante. La keynote de apertura estará a cargo de <a href="http://en.wikipedia.org/wiki/Yukihiro_Matsumoto" onclick="javascript:urchinTracker ('/outbound/article/en.wikipedia.org');">Yukihiro Matsumoto</a>, el creador de Ruby.</p>
<img src="http://feeds.feedburner.com/~r/javiervidal_ruby_rails/~4/V7VfIQ6vivI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://javiervidal.net/euruko-2009-barcelona/feed/</wfw:commentRss>
		<feedburner:origLink>http://javiervidal.net/euruko-2009-barcelona/</feedburner:origLink></item>
		<item>
		<title>Script para renombrar fotografías</title>
		<link>http://feedproxy.google.com/~r/javiervidal_ruby_rails/~3/nFqfWbh2vOo/</link>
		<comments>http://javiervidal.net/script-para-renombrar-fotografias/#comments</comments>
		<pubDate>Wed, 24 Dec 2008 09:22:44 +0000</pubDate>
		<dc:creator>Javier Vidal Postigo</dc:creator>
		
		<category><![CDATA[ruby, rails]]></category>

		<category><![CDATA[flickr]]></category>

		<category><![CDATA[fotos]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://javiervidal.net/?p=260</guid>
		<description><![CDATA[Me gusta hacer fotos y subirlas a flickr. Eso sí, antes de subirlas hago una selección, porque ahora, con las cámaras digitales, puedo sacar cientos de fotos en un fin de semana. Lo que no me gusta es subir las fotos con nombres como IMG_4356.jpg. Tampoco me gusta que después de seleccionar las fotos que [...]]]></description>
			<content:encoded><![CDATA[<p>Me gusta hacer fotos y subirlas a <a href="http://flickr.com/photos/zanaguara/" onclick="javascript:urchinTracker ('/outbound/article/flickr.com');">flickr</a>. Eso sí, antes de subirlas hago una selección, porque ahora, con las cámaras digitales, puedo sacar cientos de fotos en un fin de semana. Lo que no me gusta es subir las fotos con nombres como IMG_4356.jpg. Tampoco me gusta que después de seleccionar las fotos que voy a subir, queden huecos en la numeración. Es decir, que después de Fuerteventura_012.jpg venga Fuerteventura_023.jpg. Para evitar esto he desarrollado un script en Ruby que tal vez le pueda venir bien a alguien.</p>
<p>El script se invoca de la siguiente manera:</p>

<div class="wp_syntax"><div class="code"><pre>$ renamepics.rb new_name [n_digits]</pre></div></div>

<p>y lo que hace es renombrar cada fichero JPG del directorio actual, de manera que el nuevo nombre será de la forma:</p>

<div class="wp_syntax"><div class="code"><pre>new_name_ddd.jpg</pre></div></div>

<p>Siendo <em>ddd</em> un número de <em>n_digits</em> dígitos, y siendo la númeración de las fotografías consecutiva. Es decir, si tengo, por ejemplo, estos 3 ficheros:</p>
<p>IMG_4367.jpg<br />
IMG_4370.jpg<br />
IMG_4389.jpg</p>
<p>Ejecutando:</p>

<div class="wp_syntax"><div class="code"><pre>$ renamepics.rb Fuerteventura 2</pre></div></div>

<p>Se convertirían en:</p>
<p>Fuerteventura_01.jpg<br />
Fuerteventura_02.jpg<br />
Fuerteventura_03.jpg</p>
<p>Maníatico que es uno. Si alguien lo usa, que sea bajo su propia responsabilidad. Aquí tenéis el script:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby"><span style="color:#008000; font-style:italic;">#!/usr/local/bin/ruby</span>
<span style="color:#9966CC; font-weight:bold;">unless</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">1</span>..<span style="color:#006666;">2</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9966CC; font-weight:bold;">include</span>? ARGV.<span style="color:#9900CC;">length</span> 
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Usage: #{$0} new_name [n_digits]&quot;</span>
  <span style="color:#CC0066; font-weight:bold;">exit</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'fileutils'</span>
&nbsp;
new_name = ARGV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span>
n_digits = ARGV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#0000FF; font-weight:bold;">nil</span>? ? <span style="color:#006666;">3</span> : ARGV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span>
&nbsp;
c = <span style="color:#006666;">1</span>
d = <span style="color:#CC00FF; font-weight:bold;">Dir</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">Dir</span>.<span style="color:#9900CC;">pwd</span><span style="color:#006600; font-weight:bold;">&#41;</span>
d.<span style="color:#9900CC;">entries</span>.<span style="color:#9900CC;">sort</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>e<span style="color:#006600; font-weight:bold;">|</span>
  re = <span style="color:#006600; font-weight:bold;">/</span><span style="color:#006600; font-weight:bold;">&#40;</span>.<span style="color:#006600; font-weight:bold;">+</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">jpg</span><span style="color:#006600; font-weight:bold;">/</span>
  md = re.<span style="color:#9900CC;">match</span> e
  <span style="color:#9966CC; font-weight:bold;">unless</span> md.<span style="color:#0000FF; font-weight:bold;">nil</span>?
    n = new_name <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">'_'</span> <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#CC0066; font-weight:bold;">sprintf</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;%0#{n_digits}d&quot;</span>, c<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">&quot;.jpg&quot;</span>
    c = c <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#006666;">1</span>
    <span style="color:#9966CC; font-weight:bold;">begin</span>
      <span style="color:#CC00FF; font-weight:bold;">FileUtils</span>.<span style="color:#9900CC;">mv</span> <span style="color:#996600;">&quot;#{e}&quot;</span>, <span style="color:#996600;">&quot;#{n}&quot;</span>
    <span style="color:#9966CC; font-weight:bold;">rescue</span> <span style="color:#CC00FF; font-weight:bold;">Exception</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> e
      md = <span style="color:#006600; font-weight:bold;">/</span>^same file<span style="color:#006600; font-weight:bold;">/</span>.<span style="color:#9900CC;">match</span> e
      <span style="color:#9966CC; font-weight:bold;">next</span> <span style="color:#9966CC; font-weight:bold;">unless</span> md.<span style="color:#0000FF; font-weight:bold;">nil</span>?
    <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;#{e} =&gt; #{n}&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<img src="http://feeds.feedburner.com/~r/javiervidal_ruby_rails/~4/nFqfWbh2vOo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://javiervidal.net/script-para-renombrar-fotografias/feed/</wfw:commentRss>
		<feedburner:origLink>http://javiervidal.net/script-para-renombrar-fotografias/</feedburner:origLink></item>
		<item>
		<title>La Conferencia Rails 2008 en 37 imágenes</title>
		<link>http://feedproxy.google.com/~r/javiervidal_ruby_rails/~3/u-Xev39sC2k/</link>
		<comments>http://javiervidal.net/la-conferencia-rails-2008-en-37-imagenes/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 11:43:39 +0000</pubDate>
		<dc:creator>Javier Vidal Postigo</dc:creator>
		
		<category><![CDATA[eventos]]></category>

		<category><![CDATA[ruby, rails]]></category>

		<category><![CDATA[conferencia]]></category>

		<category><![CDATA[conferenciarails]]></category>

		<category><![CDATA[conferenciarails08]]></category>

		<category><![CDATA[conferenciarails2008]]></category>

		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://javiervidal.net/?p=257</guid>
		<description><![CDATA[Este año no voy a tener tiempo de comentar, tal y como hice el año pasado, las charlas a las que he asistido en la Conferencia Rails 2008. A lo que sí me he animado es a realizar un video con una selección de 37 imágenes. Las fotos están sacadas por mí, y tengo que [...]]]></description>
			<content:encoded><![CDATA[<p>Este año no voy a tener tiempo de comentar, <a href="http://javiervidal.net/resumen-de-la-conferencia-rails-2007/" >tal y como hice el año pasado</a>, las charlas a las que he asistido en la <a href="http://www.conferenciarails.org/" onclick="javascript:urchinTracker ('/outbound/article/www.conferenciarails.org');">Conferencia Rails 2008</a>. A lo que sí me he animado es a realizar un video con una selección de 37 imágenes. <a href="http://www.flickr.com/photos/zanaguara/sets/72157609866323027/" onclick="javascript:urchinTracker ('/outbound/article/www.flickr.com');">Las fotos están sacadas por mí</a>, y tengo que reconocer que era la primera vez que sacaba fotos en modo manual, así que entre las condiciones de luz un tanto extremas y lo inexperto del fotógrafo, no esperéis gran cosa.</p>
<p align="center">
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/IfU-zrkpr7w&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/IfU-zrkpr7w&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
</p>
<p>La canción del video es &#8220;Eterno domingo&#8221;, del grupo <a href="http://http://sundayers.openshine.com/" onclick="javascript:urchinTracker ('/outbound/article/sundayers.openshine.com');">Los Sundayers</a>. Uno de los miembros del grupo asistió a la Conferencia Rails y repartió copias de su disco, también llamado &#8220;Eterno domingo&#8221;. Da gusto ver que hay grupos que se animan a publicar sus obras con licencias <a href="http://creativecommons.org/" onclick="javascript:urchinTracker ('/outbound/article/creativecommons.org');">Creative Commons</a>.</p>
<p align="center">
<a href='http://sundayers.openshine.com/'><img src="http://javiervidal.net/wp-content/uploads/2008/11/lossundayers.jpg" alt="Los Sundayers" title="Los Sundayers" /></a></p>
<img src="http://feeds.feedburner.com/~r/javiervidal_ruby_rails/~4/u-Xev39sC2k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://javiervidal.net/la-conferencia-rails-2008-en-37-imagenes/feed/</wfw:commentRss>
		<feedburner:origLink>http://javiervidal.net/la-conferencia-rails-2008-en-37-imagenes/</feedburner:origLink></item>
		<item>
		<title>La Conferencia Rails 2008 será los días 13 y 14 de noviembre</title>
		<link>http://feedproxy.google.com/~r/javiervidal_ruby_rails/~3/3rNbCPgIsEk/</link>
		<comments>http://javiervidal.net/la-conferencia-rails-2008-sera-los-dias-13-y-14-de-noviembre/#comments</comments>
		<pubDate>Thu, 18 Sep 2008 16:16:45 +0000</pubDate>
		<dc:creator>Javier Vidal Postigo</dc:creator>
		
		<category><![CDATA[ruby, rails]]></category>

		<category><![CDATA[conferencia]]></category>

		<category><![CDATA[conferenciarails]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://javiervidal.net/?p=248</guid>
		<description><![CDATA[Como otros años, estoy participando en la organización de la Conferencia Rails. Este año se celebrará los días 13 y 14 de noviembre y todo apunta a que vamos a poder superar el listón de otras ediciones.



La primera edición fue la del 2006, la del descubrimiento. Para los que ya sabíamos lo que se puede [...]]]></description>
			<content:encoded><![CDATA[<p>Como otros años, estoy participando en la organización de la <a href="http://www.conferenciarails.org/" onclick="javascript:urchinTracker ('/outbound/article/www.conferenciarails.org');">Conferencia Rails</a>. Este año se celebrará los días <strong>13 y 14 de noviembre</strong> y todo apunta a que vamos a poder superar el listón de otras ediciones.</p>
<p class="center">
<img src="http://javiervidal.net/wp-content/uploads/2008/09/logo_conferencia_rails.png" alt="logo_conferencia_rails" title="logo_conferencia_rails" width="100" />
</p>
<p>La primera edición fue la del <a href="http://2006.conferenciarails.org/" onclick="javascript:urchinTracker ('/outbound/article/2006.conferenciarails.org');">2006</a>, la del <strong>descubrimiento</strong>. Para los que ya sabíamos lo que se puede disfrutar programando en Rails, fue el descubrimiento de que había mucha otra gente programando con este framework tan poco conocido por entonces. Para los que se acercaban por primera vez a Rails, fue el descubrimiento del framework en sí. Fue todo un éxito porque no sabíamos si seríamos más de 20 y acabamos siendo unos 150.</p>
<p>La segunda edición, la del <a href="http://2007.conferenciarails.org/" onclick="javascript:urchinTracker ('/outbound/article/2007.conferenciarails.org');">2007</a>, fue la de la <strong>consolidación</strong>. Sabíamos de antemano que el interés por Rails existía y aquí vimos que dicho interés era creciente, que las empresas estaban adoptando la tecnología y que el framework maduraba.</p>
<p>¿Cómo será la próxima edición? Por lo pronto, hay un gran interés por patrocionar el evento, con lo que veo que el negocio en torno a Rails está creciendo. Por otro lado, parece que va a ser posible traer a varios gurús a nivel mundial. Este año también se reducirá el número de ponencias, para así ofrecer las de mayor calidad.</p>
<p>Por cierto, ¿todavía no has presentado tu propuesta de ponencia? <a href="http://www.conferenciarails.org/2008/08/call-for-papers-para-la-edicion-de-2008/" onclick="javascript:urchinTracker ('/outbound/article/www.conferenciarails.org');">El plazo termina el 29 de septiembre</a>. No lo dejes para el último día.</p>
<img src="http://feeds.feedburner.com/~r/javiervidal_ruby_rails/~4/3rNbCPgIsEk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://javiervidal.net/la-conferencia-rails-2008-sera-los-dias-13-y-14-de-noviembre/feed/</wfw:commentRss>
		<feedburner:origLink>http://javiervidal.net/la-conferencia-rails-2008-sera-los-dias-13-y-14-de-noviembre/</feedburner:origLink></item>
		<item>
		<title>Enlaces :ruby, :rails =&gt; “agosto 2008″</title>
		<link>http://feedproxy.google.com/~r/javiervidal_ruby_rails/~3/oeT5AbY9Gfs/</link>
		<comments>http://javiervidal.net/enlaces-ruby-rails-agosto-2008/#comments</comments>
		<pubDate>Mon, 01 Sep 2008 09:16:10 +0000</pubDate>
		<dc:creator>Javier Vidal Postigo</dc:creator>
		
		<category><![CDATA[ruby, rails]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://javiervidal.net/?p=246</guid>
		<description><![CDATA[Enlaces destacados de Ruby y Rails durante el mes de agosto de 2008:

Vulnerabilidad por denegación de servicio en la librería REXML.
Qué nos espera en Ruby 1.9.
daemon_controller: una librería para gestionar demonios.
Rails 2.2 será &#8220;thread safe&#8221;.
Ventajas en incovenientes de GitHub y RubyForge como repositorios de gemas.

]]></description>
			<content:encoded><![CDATA[<p>Enlaces destacados de Ruby y Rails durante el mes de agosto de 2008:</p>
<ul>
<li><a href="http://www.ruby-lang.org/en/news/2008/08/23/dos-vulnerability-in-rexml/" onclick="javascript:urchinTracker ('/outbound/article/www.ruby-lang.org');">Vulnerabilidad por denegación de servicio en la librería REXML</a>.</li>
<li><a href="http://slideshow.rubyforge.org/ruby19.html" onclick="javascript:urchinTracker ('/outbound/article/slideshow.rubyforge.org');">Qué nos espera en Ruby 1.9</a>.</li>
<li><a href="http://blog.phusion.nl/2008/08/25/daemon_controller-a-library-for-robust-daemon-management/" onclick="javascript:urchinTracker ('/outbound/article/blog.phusion.nl');">daemon_controller: una librería para gestionar demonios</a>.</li>
<li><a href="http://www.railsinside.com/news/74-rails-22-to-be-thread-safe.html" onclick="javascript:urchinTracker ('/outbound/article/www.railsinside.com');">Rails 2.2 será &#8220;thread safe&#8221;</a>.</li>
<li><a href="http://www.infoq.com/news/2008/08/gems-from-rubyforge-and-github" onclick="javascript:urchinTracker ('/outbound/article/www.infoq.com');">Ventajas en incovenientes de GitHub y RubyForge como repositorios de gemas</a>.</li>
</ul>
<img src="http://feeds.feedburner.com/~r/javiervidal_ruby_rails/~4/oeT5AbY9Gfs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://javiervidal.net/enlaces-ruby-rails-agosto-2008/feed/</wfw:commentRss>
		<feedburner:origLink>http://javiervidal.net/enlaces-ruby-rails-agosto-2008/</feedburner:origLink></item>
		<item>
		<title>Enlaces :ruby, :rails =&gt; “julio 2008″</title>
		<link>http://feedproxy.google.com/~r/javiervidal_ruby_rails/~3/FIW99XD-eHI/</link>
		<comments>http://javiervidal.net/enlaces-ruby-rails-julio-2008/#comments</comments>
		<pubDate>Fri, 01 Aug 2008 07:34:55 +0000</pubDate>
		<dc:creator>Javier Vidal Postigo</dc:creator>
		
		<category><![CDATA[ruby, rails]]></category>

		<category><![CDATA[engine yard]]></category>

		<category><![CDATA[jruby]]></category>

		<category><![CDATA[libxml-ruby]]></category>

		<category><![CDATA[open flash chart]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[rails edge]]></category>

		<category><![CDATA[railsconf]]></category>

		<category><![CDATA[redcloth]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://javiervidal.net/?p=241</guid>
		<description><![CDATA[Noticias destacadas de Ruby y Rails durante el mes de julio de 2008:

Se anuncia Rails Summit Latin America 2008.
Engine Yard consigue $15 millones de financiación.
Se publica libxml-ruby 0.8.0, con una gran mejora del rendimiento en el parseo de XML.
Se lanza JRuby 1.1.3.
Open Flash Chart ahora como plugin para Rails.
Se lanza RedCloth 4.0.
Disponible el calendario de [...]]]></description>
			<content:encoded><![CDATA[<p>Noticias destacadas de Ruby y Rails durante el mes de julio de 2008:</p>
<ul>
<li>Se anuncia <a href="http://www.akitaonrails.com/2008/7/13/rails-summit-latin-america-2008" onclick="javascript:urchinTracker ('/outbound/article/www.akitaonrails.com');">Rails Summit Latin America 2008</a>.</li>
<li><a href="http://javiervidal.net/engine-yard-15-millones-financiacion/" >Engine Yard consigue $15 millones de financiación.</a></li>
<li><a href="http://www.rubyinside.com/ruby-xml-crisis-over-libxml-0-8-0-released-955.html" onclick="javascript:urchinTracker ('/outbound/article/www.rubyinside.com');">Se publica libxml-ruby 0.8.0</a>, con una gran mejora del rendimiento en el parseo de XML.</li>
<li><a href="http://docs.codehaus.org/display/JRUBY/2008/07/19/JRuby+1.1.3+Released" onclick="javascript:urchinTracker ('/outbound/article/docs.codehaus.org');">Se lanza JRuby 1.1.3</a>.</li>
<li><a href="http://www.pullmonkey.com/projects/open_flash_chart" onclick="javascript:urchinTracker ('/outbound/article/www.pullmonkey.com');">Open Flash Chart ahora como plugin para Rails</a>.</li>
<li><a href="http://www.rubyinside.com/redcloth-4-released-962.html" onclick="javascript:urchinTracker ('/outbound/article/www.rubyinside.com');">Se lanza RedCloth 4.0</a>.</li>
<li>Disponible el <a href="http://en.oreilly.com/railseurope2008/public/schedule/grid" onclick="javascript:urchinTracker ('/outbound/article/en.oreilly.com');">calendario de la RailsConf Europe 2008</a>.</li>
<li><a href="http://ryandaigle.com/articles/2008/7/22/what-s-new-in-edge-rails-standard-internationalization-framework" onclick="javascript:urchinTracker ('/outbound/article/ryandaigle.com');">La internacionalización llega a Rails Edge</a>.</li>
</ul>
<img src="http://feeds.feedburner.com/~r/javiervidal_ruby_rails/~4/FIW99XD-eHI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://javiervidal.net/enlaces-ruby-rails-julio-2008/feed/</wfw:commentRss>
		<feedburner:origLink>http://javiervidal.net/enlaces-ruby-rails-julio-2008/</feedburner:origLink></item>
		<item>
		<title>Rails en producción - Parte 6 - Cluster de mongrels</title>
		<link>http://feedproxy.google.com/~r/javiervidal_ruby_rails/~3/QFywyPYy9dM/</link>
		<comments>http://javiervidal.net/rails-produccion-6/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 13:52:49 +0000</pubDate>
		<dc:creator>Javier Vidal Postigo</dc:creator>
		
		<category><![CDATA[ruby, rails]]></category>

		<category><![CDATA[sysadmin]]></category>

		<category><![CDATA[cluster]]></category>

		<category><![CDATA[mongrel]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://javiervidal.net/?p=240</guid>
		<description><![CDATA[Ya sólo nos queda configurar un cluster de mongrels y apuntar hacia ellos el servidor web nginx. Supongamos que vamos a arrancar 4 mongrels, tal y como representamos en la figura de la primera parte parte de este tutorial. Los mongrels escucharán en los puertos 8000 a 8003.
Para configurar el cluster hacemos:

$ mongrel_rails cluster::configure -e [...]]]></description>
			<content:encoded><![CDATA[<p>Ya sólo nos queda configurar un cluster de mongrels y apuntar hacia ellos el servidor web nginx. Supongamos que vamos a arrancar 4 mongrels, tal y como representamos en la figura de la primera parte parte de este tutorial. Los mongrels escucharán en los puertos 8000 a 8003.</p>
<p>Para configurar el cluster hacemos:</p>

<div class="wp_syntax"><div class="code"><pre>$ mongrel_rails cluster::configure -e production -p 8000 -N 4 -c /var/miaplicacion/current -a 127.0.0.1
** Ruby version is not up-to-date<SEMI> loading cgi_multipart_eof_fix
Writing configuration file to config/mongrel_cluster.yml.</pre></div></div>

<p>Este comando habrá creado el fichero config/mongrel_cluster.yml. Lo editamos y añadimos al final sendas líneas indicando el usuario y el grupo que ejecutarán los mongrels. Como ya indicamos, será un usuario no privilegiado el que ejecute tanto el servidor web como los mongrels:</p>

<div class="wp_syntax"><div class="code"><pre>cwd: /var/www/miaplicacion/current
log_file: log/mongrel.log
port: &quot;8000&quot;
environment: production
address: 127.0.0.1
pid_file: tmp/pids/mongrel.pid
servers: 4
user: usuario
group: usuario</pre></div></div>

<p>Añadiremos el cluster de mongrels al arranque de la máquina:</p>

<div class="wp_syntax"><div class="code"><pre>sudo mkdir /etc/mongrel_cluster
sudo ln -s /var/www/miaplicacion/current/config/mongrel_cluster.yml /etc/mongrel_cluster/miaplicacion.yml
sudo cp /usr/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/resources/mongrel_cluster /etc/init.d
sudo chmod +x /etc/init.d/mongrel_cluster
sudo /usr/sbin/update-rc.d -f mongrel_cluster defaults
sudo ln -s /usr/bin/ruby1.8 /usr/bin/ruby</pre></div></div>

<p>Y ya podremos arrancar y parar el cluster de mongrels:</p>

<div class="wp_syntax"><div class="code"><pre>$ sudo /etc/init.d/mongrel_cluster start
$ sudo /etc/init.d/mongrel_cluster stop</pre></div></div>

<p>Ahora sólo nos queda apuntar el servidor web nginx a los mongrels. Para ello, editaremos el fichero /usr/local/nginx/conf/nginx.conf. Éste es un ejemplo básico del cual podemos partir.</p>

<div class="wp_syntax"><div class="code"><pre class="bash">user              miusuario miusuario;
worker_processes  <span style="color: #000000;">4</span>;
&nbsp;
events <span style="color: #7a0874; font-weight: bold;">&#123;</span>
    worker_connections  <span style="color: #000000;">1024</span>;
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
http <span style="color: #7a0874; font-weight: bold;">&#123;</span>
    include           mime.types;
    default_type      application<span style="color: #000000; font-weight: bold;">/</span>octet-stream;
    sendfile          on;
    keepalive_timeout <span style="color: #000000;">65</span>;
    <span style="color: #c20cb9; font-weight: bold;">gzip</span>              on;
&nbsp;
    upstream miaplicacion <span style="color: #7a0874; font-weight: bold;">&#123;</span>
        server <span style="color: #000000;">127.0</span><span style="color: #000000;">.0</span><span style="color: #000000;">.1</span>:<span style="color: #000000;">8000</span>;
        server <span style="color: #000000;">127.0</span><span style="color: #000000;">.0</span><span style="color: #000000;">.1</span>:<span style="color: #000000;">8001</span>;
        server <span style="color: #000000;">127.0</span><span style="color: #000000;">.0</span><span style="color: #000000;">.1</span>:<span style="color: #000000;">8002</span>;
        server <span style="color: #000000;">127.0</span><span style="color: #000000;">.0</span><span style="color: #000000;">.1</span>:<span style="color: #000000;">8003</span>;
    <span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
    server <span style="color: #7a0874; font-weight: bold;">&#123;</span>
        listen       <span style="color: #000000;">80</span>;
        server_name  midominio.com;
&nbsp;
        root   <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>miaplicacion<span style="color: #000000; font-weight: bold;">/</span>current<span style="color: #000000; font-weight: bold;">/</span>public;
        index  index.html;
&nbsp;
        location <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span>
          proxy_set_header  X-Real-IP  <span style="color: #007800;">$remote_addr</span>;
          proxy_set_header  X-Forwarded-For <span style="color: #007800;">$proxy_add_x_forwarded_for</span>;
          proxy_set_header Host <span style="color: #007800;">$http_host</span>;
          proxy_redirect <span style="color: #c20cb9; font-weight: bold;">false</span>;
&nbsp;
          <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>-f <span style="color: #007800;">$request_filename</span><span style="color: #000000; font-weight: bold;">/</span>index.html<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span>
            rewrite <span style="color: #7a0874; font-weight: bold;">&#40;</span>.<span style="color: #000000; font-weight: bold;">*</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> $<span style="color: #000000;">1</span><span style="color: #000000; font-weight: bold;">/</span>index.html <span style="color: #7a0874; font-weight: bold;">break</span>;
          <span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
          <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>-f <span style="color: #007800;">$request_filename</span>.html<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span>
            rewrite <span style="color: #7a0874; font-weight: bold;">&#40;</span>.<span style="color: #000000; font-weight: bold;">*</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> $<span style="color: #000000;">1</span>.html <span style="color: #7a0874; font-weight: bold;">break</span>;
          <span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
          <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">!</span>-f <span style="color: #007800;">$request_filename</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span>
            proxy_pass http:<span style="color: #000000; font-weight: bold;">//</span>miaplicacion;
            <span style="color: #7a0874; font-weight: bold;">break</span>;
          <span style="color: #7a0874; font-weight: bold;">&#125;</span>
        <span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;"># redirect server error pages to the static page /50x.html</span>
        <span style="color: #666666; font-style: italic;">#</span>
        error_page   <span style="color: #000000;">500</span> <span style="color: #000000;">502</span> <span style="color: #000000;">503</span> <span style="color: #000000;">504</span>  <span style="color: #000000; font-weight: bold;">/</span>50x.html;
        location = <span style="color: #000000; font-weight: bold;">/</span>50x.html <span style="color: #7a0874; font-weight: bold;">&#123;</span>
            root   html;
        <span style="color: #7a0874; font-weight: bold;">&#125;</span>
    <span style="color: #7a0874; font-weight: bold;">&#125;</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></div></div>

<p>En la sección &#8220;upstream&#8221; apuntamos hacia los mongrels. En ella, &#8220;miaplicacion&#8221; es una etiqueta, la misma que usamos más abajo en la línea:</p>

<div class="wp_syntax"><div class="code"><pre class="bash">proxy_pass http:<span style="color: #000000; font-weight: bold;">//</span>miaplicacion;</pre></div></div>

<p>En la sección &#8220;server&#8221; cabe destacar que &#8220;root&#8221; apunta al directorio public de mi aplicación.  </p>
<p>Rearrancamos nginx para que la nueva configuración surta efecto:</p>

<div class="wp_syntax"><div class="code"><pre>$ sudo /etc/init.d/nginx stop
$ sudo /etc/init.d/nginx start</pre></div></div>

<p>Y ahora sí, por fin, tenemos que poder abrir desde nuestro navegador la URL:</p>

<div class="wp_syntax"><div class="code"><pre>http://midominio.com/</pre></div></div>

<p>y acceder a nuestra aplicación. Si no tenemos configurado todavía la entrada en DNS, tendremos que poner la IP.</p>
<p>Como una última prueba, probaremos una vez más a rearracar la máquina y ver que todo arranca correctamente.</p>
<h3>Tutorial completo</h3>
<ul>
<li><a href="http://javiervidal.net/rails-produccion-1" >Rails en producción - Parte 1 - Introducción</a></li>
<li><a href="http://javiervidal.net/rails-produccion-2" >Rails en producción - Parte 2 - Configuración del servidor debian</a></li>
<li><a href="http://javiervidal.net/rails-produccion-3" >Rails en producción - Parte 3 - MySQL, Ruby y Rails</a></li>
<li><a href="http://javiervidal.net/rails-produccion-4" >Rails en producción - Parte 4 - Servidor web nginx</a></li>
<li><a href="http://javiervidal.net/rails-produccion-5" >Rails en producción - Parte 5 - Mongrels e instalación de nuestra aplicación</a></li>
<li><a href="http://javiervidal.net/rails-produccion-6" >Rails en producción - Parte 6 - Cluster de mongrels</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/javiervidal_ruby_rails/~4/QFywyPYy9dM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://javiervidal.net/rails-produccion-6/feed/</wfw:commentRss>
		<feedburner:origLink>http://javiervidal.net/rails-produccion-6/</feedburner:origLink></item>
		<item>
		<title>Rails en producción - Parte 5 - Mongrel e instalación de nuestra aplicación</title>
		<link>http://feedproxy.google.com/~r/javiervidal_ruby_rails/~3/VELgB8b3D0U/</link>
		<comments>http://javiervidal.net/rails-produccion-5/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 13:52:36 +0000</pubDate>
		<dc:creator>Javier Vidal Postigo</dc:creator>
		
		<category><![CDATA[ruby, rails]]></category>

		<category><![CDATA[sysadmin]]></category>

		<category><![CDATA[mongrel]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://javiervidal.net/?p=239</guid>
		<description><![CDATA[Mongrel
Mongrel será el encargado de atender las peticiones HTTP que lleguen del servidor web y ejecutar nuestra aplicación en el intérprete de Ruby.
Para instalar mongrel simplemente haremos:

$ sudo gem install mongrel mongrel_cluster --include-dependencies --no-rdoc --no-ri

Instalación de nuestra aplicación
Supondré que tenemos nuestra aplicación en un repositorio de subversion. En este caso, antes de poder hacer un [...]]]></description>
			<content:encoded><![CDATA[<h3>Mongrel</h3>
<p><a href="http://mongrel.rubyforge.org/" onclick="javascript:urchinTracker ('/outbound/article/mongrel.rubyforge.org');">Mongrel</a> será el encargado de atender las peticiones HTTP que lleguen del servidor web y ejecutar nuestra aplicación en el intérprete de Ruby.</p>
<p>Para instalar mongrel simplemente haremos:</p>

<div class="wp_syntax"><div class="code"><pre>$ sudo gem install mongrel mongrel_cluster --include-dependencies --no-rdoc --no-ri</pre></div></div>

<h3>Instalación de nuestra aplicación</h3>
<p>Supondré que tenemos nuestra aplicación en un repositorio de <a href="http://subversion.tigris.org/" onclick="javascript:urchinTracker ('/outbound/article/subversion.tigris.org');">subversion</a>. En este caso, antes de poder hacer un export de la aplicación desde el repositorio, necesitaré instalar subversion:</p>

<div class="wp_syntax"><div class="code"><pre>$ sudo aptitude install subversion -y</pre></div></div>

<p>Ahora ya podré transferir una copia de mi aplicación al servidor de producción. Supondré que la aplicación la vamos a instalar, por ejemplo, en /var/www/miaplicacion/current.</p>

<div class="wp_syntax"><div class="code"><pre>$ sudo chown usuario:usuario /var/www
$ mkdir /var/www/miaplicacion
$ cd /var/www/miaplicacion
$ svn export http://svn.midominio.com/miaplicacion/trunk current</pre></div></div>

<p>Necesitamos crear una base de datos para la aplicación:</p>

<div class="wp_syntax"><div class="code"><pre class="bash">$ mysql --<span style="color: #007800;">user=</span>root -p
mysql<span style="color: #000000; font-weight: bold;">&gt;</span> grant all on miaplicacion_production.<span style="color: #000000; font-weight: bold;">*</span> to miaplicacion<span style="color: #000000; font-weight: bold;">@</span>localhost identified by <span style="color: #ff0000;">'miaplicacion'</span>;
mysql<span style="color: #000000; font-weight: bold;">&gt;</span> flush privileges;
mysql<span style="color: #000000; font-weight: bold;">&gt;</span> create database miaplicacion_production;</pre></div></div>

<p>Es decir, hemos creado una base de datos llamada &#8220;miaplicacion_production&#8221; y un usuario &#8220;miaplicacion&#8221;, con idéntica password, que dispone de todos los permisos en &#8220;miaplicacion_production&#8221;.</p>
<p>Normalmente, tendremos que configurar el fichero config/database.yml de nuestra aplicación para que apunte a la base de datos que acabamos de crear:</p>

<div class="wp_syntax"><div class="code"><pre>production:
  adapter: mysql
  database: miaplicacion_production
  username: miaplicacion
  password: miaplicacion
  socket: /var/run/mysqld/mysqld.sock
  host: localhost
  encoding: utf8</pre></div></div>

<p>Antes de poder arrancar nuestra aplicación deberemos instalar todas las gemas que utilicemos y que no hayamos instalado. Si no nos acordamos podemos intentar arrancar la aplicación y ver los errores. Leyendo el log de errores suele ser fácil identificar si nos falta alguna gema. Una que siempre viene bien será:</p>

<div class="wp_syntax"><div class="code"><pre>$ sudo gem install rake</pre></div></div>

<p>Hay que tener en cuenta que si no especificamos la versión, gem install instalará la última versión disponible en el repositorio. Esto quiere decir que en el entorno de desarrollo y en el de test, si instalamos las gemas hace tiempo, las versiones pueden ser inferiores, y por lo tanto, nos podemos encontrar con problemas de compatibilidad. Para ver las gemas instaladas en una máquina y sus versiones podemos ejecutar:</p>

<div class="wp_syntax"><div class="code"><pre>$ gem list</pre></div></div>

<p>Ahora ya puedo arrancar mi aplicación. De momento, para probar, arrancaremos un único proceso mongrel. Todavía no hemos configurado el servidor web para que apunte a los mongrels, así que no podremos comprobar con un navegador que funciona. Simplemente, veremos que arranca correctamente leyendo el fichero log/production.log:</p>

<div class="wp_syntax"><div class="code"><pre>$ cd /var/www/miaplicacion/current
$ mongrel_rails start -d -e production -p 8000 -P log/mongrel8000.pid</pre></div></div>

<p>Si en el fichero de log vemos que la aplicación ha arrancado, podríamos incluso comprobar que sirve peticiones:</p>

<div class="wp_syntax"><div class="code"><pre>$ cd
$ wget http://localhost:8000/</pre></div></div>

<p>Esto me guardaría en el directorio raíz del usuario un fichero llamado index.html con el HTML de la página raíz de mi aplicación. En el fichero de log debería poder ver la petición. ¿Quién necesita un browser?</p>
<p>En el último capítulo configuraremos un cluster de mongrels y apuntaremos el servidor web hacia ellos. Por eso, ahora, paramos el mongrel que hemos arrancado como prueba:</p>

<div class="wp_syntax"><div class="code"><pre>$ mongrel_rails stop -P log/mongrel8000.pid</pre></div></div>

<h3>Tutorial completo</h3>
<ul>
<li><a href="http://javiervidal.net/rails-produccion-1" >Rails en producción - Parte 1 - Introducción</a></li>
<li><a href="http://javiervidal.net/rails-produccion-2" >Rails en producción - Parte 2 - Configuración del servidor debian</a></li>
<li><a href="http://javiervidal.net/rails-produccion-3" >Rails en producción - Parte 3 - MySQL, Ruby y Rails</a></li>
<li><a href="http://javiervidal.net/rails-produccion-4" >Rails en producción - Parte 4 - Servidor web nginx</a></li>
<li><a href="http://javiervidal.net/rails-produccion-5" >Rails en producción - Parte 5 - Mongrels e instalación de nuestra aplicación</a></li>
<li><a href="http://javiervidal.net/rails-produccion-6" >Rails en producción - Parte 6 - Cluster de mongrels</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/javiervidal_ruby_rails/~4/VELgB8b3D0U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://javiervidal.net/rails-produccion-5/feed/</wfw:commentRss>
		<feedburner:origLink>http://javiervidal.net/rails-produccion-5/</feedburner:origLink></item>
		<item>
		<title>Rails en producción - Parte 4 - Servidor web nginx</title>
		<link>http://feedproxy.google.com/~r/javiervidal_ruby_rails/~3/1xz6_djORsg/</link>
		<comments>http://javiervidal.net/rails-produccion-4/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 13:52:19 +0000</pubDate>
		<dc:creator>Javier Vidal Postigo</dc:creator>
		
		<category><![CDATA[ruby, rails]]></category>

		<category><![CDATA[sysadmin]]></category>

		<category><![CDATA[nginx]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://javiervidal.net/?p=238</guid>
		<description><![CDATA[El servidor web que vamos a utilizar es nginx. Lo instalaremos compilando el código fuente de la última versión estable. Yo he utilizado la versión 0.6.32.
Primeramente, instalaremos varios paquetes de debian que son necesarios:

$ sudo aptitude install libpcre3 libpcre3-dev libpcrecpp0 libssl-dev zlib1g-dev

En el directorio sources que creamos anteriormente para compilar Rubygems, nos descargamos nginx y [...]]]></description>
			<content:encoded><![CDATA[<p>El servidor web que vamos a utilizar es <a href="http://nginx.net/" onclick="javascript:urchinTracker ('/outbound/article/nginx.net');">nginx</a>. Lo instalaremos compilando el código fuente de la última versión estable. Yo he utilizado la versión 0.6.32.</p>
<p>Primeramente, instalaremos varios paquetes de debian que son necesarios:</p>

<div class="wp_syntax"><div class="code"><pre>$ sudo aptitude install libpcre3 libpcre3-dev libpcrecpp0 libssl-dev zlib1g-dev</pre></div></div>

<p>En el directorio sources que creamos anteriormente para compilar Rubygems, nos descargamos nginx y hacemos el configure con la opción with-http_ssl_module:</p>

<div class="wp_syntax"><div class="code"><pre>$ sudo aptitude install libpcre3 libpcre3-dev libpcrecpp0 libssl-dev zlib1g-dev
$ cd ~/sources
$ wget http://sysoev.ru/nginx/nginx-0.6.32.tar.gz
$ tar xvf nginx-0.6.32.tar.gz 
$ cd nginx-0.6.32
$ ./configure --with-http_ssl_module</pre></div></div>

<p>La salida del configure es muy extensa. Al final nos aparecerá un resumen con el path de los ejecutables y los ficheros de configuración:</p>

<div class="wp_syntax"><div class="code"><pre>Configuration summary
  + using system PCRE library
  + OpenSSL library is not used
  + md5 library is not used
  + sha1 library is not used
  + using system zlib library
&nbsp;
  nginx path prefix: &quot;/usr/local/nginx&quot;
  nginx binary file: &quot;/usr/local/nginx/sbin/nginx&quot;
  nginx configuration prefix: &quot;/usr/local/nginx/conf&quot;
  nginx configuration file: &quot;/usr/local/nginx/conf/nginx.conf&quot;
  nginx pid file: &quot;/usr/local/nginx/logs/nginx.pid&quot;
  nginx error log file: &quot;/usr/local/nginx/logs/error.log&quot;
  nginx http access log file: &quot;/usr/local/nginx/logs/access.log&quot;
  nginx http client request body temporary files: &quot;/usr/local/nginx/client_body_temp&quot;
  nginx http proxy temporary files: &quot;/usr/local/nginx/proxy_temp&quot;
  nginx http fastcgi temporary files: &quot;/usr/local/nginx/fastcgi_temp&quot;</pre></div></div>

<p>Después del configure, ejecutamos make para compilar y make install para instalar:</p>

<div class="wp_syntax"><div class="code"><pre>$ make
$ sudo make install</pre></div></div>

<p>Para probar que funciona arrancamos el demonio:</p>

<div class="wp_syntax"><div class="code"><pre>$ sudo /usr/local/nginx/sbin/nginx</pre></div></div>

<p>Esto habrá arrancado el servidor web en el puerto 80. En un navegador podemos teclear la URL:</p>

<div class="wp_syntax"><div class="code"><pre>http://IP/</pre></div></div>

<p>Siendo IP, claro está, la IP de nuestro servidor. Nos deberá aparecer la página de bienvenida a nginx.</p>
<p>Paramos el proceso que hemos arrancado:</p>

<div class="wp_syntax"><div class="code"><pre>$ sudo kill `cat /usr/local/nginx/logs/nginx.pid`</pre></div></div>

<p>Creamos el fichero de arranque de nginx /etc/init.d/nginx con el siguiente contenido:</p>

<div class="wp_syntax"><div class="code"><pre class="bash"><span style="color: #666666; font-style: italic;">#! /bin/sh</span>
&nbsp;
<span style="color: #666666; font-style: italic;">### BEGIN INIT INFO</span>
<span style="color: #666666; font-style: italic;"># Provides:          nginx</span>
<span style="color: #666666; font-style: italic;"># Required-Start:    $all</span>
<span style="color: #666666; font-style: italic;"># Required-Stop:     $all</span>
<span style="color: #666666; font-style: italic;"># Default-Start:     2 3 4 5</span>
<span style="color: #666666; font-style: italic;"># Default-Stop:      0 1 6</span>
<span style="color: #666666; font-style: italic;"># Short-Description: starts the nginx web server</span>
<span style="color: #666666; font-style: italic;"># Description:       starts nginx using start-stop-daemon</span>
<span style="color: #666666; font-style: italic;">### END INIT INFO</span>
&nbsp;
<span style="color: #007800;">PATH=</span><span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>sbin:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #000000; font-weight: bold;">/</span>sbin:<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin
<span style="color: #007800;">DAEMON=</span><span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>nginx
<span style="color: #007800;">NAME=</span>nginx
<span style="color: #007800;">DESC=</span>nginx
&nbsp;
<span style="color: #7a0874; font-weight: bold;">test</span> -x <span style="color: #007800;">$DAEMON</span> <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">0</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Include nginx defaults if available</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> -f <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>default<span style="color: #000000; font-weight: bold;">/</span>nginx <span style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span style="color: #000000; font-weight: bold;">then</span>
        . <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>default<span style="color: #000000; font-weight: bold;">/</span>nginx
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">set</span> -e
&nbsp;
<span style="color: #000000; font-weight: bold;">case</span> <span style="color: #ff0000;">&quot;$1&quot;</span> <span style="color: #000000; font-weight: bold;">in</span>
  start<span style="color: #7a0874; font-weight: bold;">&#41;</span>
        <span style="color: #7a0874; font-weight: bold;">echo</span> -n <span style="color: #ff0000;">&quot;Starting $DESC: &quot;</span>
        start-stop-daemon --start --quiet --pidfile <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>logs<span style="color: #000000; font-weight: bold;">/</span>nginx.pid \
                --exec <span style="color: #007800;">$DAEMON</span> -- <span style="color: #007800;">$DAEMON_OPTS</span>
        <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;$NAME.&quot;</span>
        <span style="color: #000000; font-weight: bold;">;;</span>
  stop<span style="color: #7a0874; font-weight: bold;">&#41;</span>
        <span style="color: #7a0874; font-weight: bold;">echo</span> -n <span style="color: #ff0000;">&quot;Stopping $DESC: &quot;</span>
        start-stop-daemon --stop --quiet --pidfile <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>logs<span style="color: #000000; font-weight: bold;">/</span>nginx.pid \
                --exec <span style="color: #007800;">$DAEMON</span>
        <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;$NAME.&quot;</span>
        <span style="color: #000000; font-weight: bold;">;;</span>
  restart<span style="color: #000000; font-weight: bold;">|</span>force-reload<span style="color: #7a0874; font-weight: bold;">&#41;</span>
        <span style="color: #7a0874; font-weight: bold;">echo</span> -n <span style="color: #ff0000;">&quot;Restarting $DESC: &quot;</span>
        start-stop-daemon --stop --quiet --pidfile \
                <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>logs<span style="color: #000000; font-weight: bold;">/</span>nginx.pid --exec <span style="color: #007800;">$DAEMON</span>
        <span style="color: #c20cb9; font-weight: bold;">sleep</span> <span style="color: #000000;">1</span>
        start-stop-daemon --start --quiet --pidfile \
                <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>logs<span style="color: #000000; font-weight: bold;">/</span>nginx.pid --exec <span style="color: #007800;">$DAEMON</span> -- <span style="color: #007800;">$DAEMON_OPTS</span>
        <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;$NAME.&quot;</span>
        <span style="color: #000000; font-weight: bold;">;;</span>
  reload<span style="color: #7a0874; font-weight: bold;">&#41;</span>
      <span style="color: #7a0874; font-weight: bold;">echo</span> -n <span style="color: #ff0000;">&quot;Reloading $DESC configuration: &quot;</span>
      start-stop-daemon --stop --signal HUP --quiet --pidfile <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span><span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>logs<span style="color: #000000; font-weight: bold;">/</span>nginx.pid \
          --exec <span style="color: #007800;">$DAEMON</span>
      <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;$NAME.&quot;</span>
      <span style="color: #000000; font-weight: bold;">;;</span>
  <span style="color: #000000; font-weight: bold;">*</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
        <span style="color: #007800;">N=</span><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$NAME</span>
        <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Usage: $N {start|stop|restart|force-reload}&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">2</span>
        <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span>
        <span style="color: #000000; font-weight: bold;">;;</span>
<span style="color: #000000; font-weight: bold;">esac</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">0</span></pre></div></div>

<p>Le damos permisos de ejecución y lo añadimos al arranque de la máquina:</p>

<div class="wp_syntax"><div class="code"><pre>$ sudo chmod +x /etc/init.d/nginx
$ sudo /usr/sbin/update-rc.d -f nginx defaults</pre></div></div>

<p>Editamos el fichero de configuración /usr/local/nginx/conf/nginx.conf. El usuario encargado de ejecutar nginx será el usuario no privilegiado que hemos creado anteriomente. También podemos ajustar el número de procesos que atenderán peticiones:</p>

<div class="wp_syntax"><div class="code"><pre class="bash">user              usuario usuario;
worker_processes  <span style="color: #000000;">4</span>;</pre></div></div>

<p>Para arrancarlo y pararlo ya podemos hacer:</p>

<div class="wp_syntax"><div class="code"><pre>$ sudo /etc/init.d/nginx start
$ sudo /etc/init.d/nginx stop</pre></div></div>

<h3>Tutorial completo</h3>
<ul>
<li><a href="http://javiervidal.net/rails-produccion-1" >Rails en producción - Parte 1 - Introducción</a></li>
<li><a href="http://javiervidal.net/rails-produccion-2" >Rails en producción - Parte 2 - Configuración del servidor debian</a></li>
<li><a href="http://javiervidal.net/rails-produccion-3" >Rails en producción - Parte 3 - MySQL, Ruby y Rails</a></li>
<li><a href="http://javiervidal.net/rails-produccion-4" >Rails en producción - Parte 4 - Servidor web nginx</a></li>
<li><a href="http://javiervidal.net/rails-produccion-5" >Rails en producción - Parte 5 - Mongrels e instalación de nuestra aplicación</a></li>
<li><a href="http://javiervidal.net/rails-produccion-6" >Rails en producción - Parte 6 - Cluster de mongrels</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/javiervidal_ruby_rails/~4/1xz6_djORsg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://javiervidal.net/rails-produccion-4/feed/</wfw:commentRss>
		<feedburner:origLink>http://javiervidal.net/rails-produccion-4/</feedburner:origLink></item>
		<item>
		<title>Rails en producción - Parte 3 - MySQL, Ruby y Rails</title>
		<link>http://feedproxy.google.com/~r/javiervidal_ruby_rails/~3/QGKD4tfHmSg/</link>
		<comments>http://javiervidal.net/rails-produccion-3/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 13:51:58 +0000</pubDate>
		<dc:creator>Javier Vidal Postigo</dc:creator>
		
		<category><![CDATA[mysql]]></category>

		<category><![CDATA[ruby, rails]]></category>

		<category><![CDATA[sysadmin]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://javiervidal.net/?p=237</guid>
		<description><![CDATA[Postfix
Para que la instalación de MySQL no nos instale exim, instalaremos el servidor de correo Postfix.

$ sudo aptitude install postfix -y

MySQL
Instalamos los paquetes de MySQL. Esto además nos creará el usuario mysql en nuestro sistema:

$ sudo aptitude install mysql-server mysql-client libmysqlclient15-dev libmysql-ruby -y

Configuraremos una contraseña para el usuario root de la base de datos:

$ mysqladmin [...]]]></description>
			<content:encoded><![CDATA[<h3>Postfix</h3>
<p>Para que la instalación de MySQL no nos instale exim, instalaremos el servidor de correo <a href="http://www.postfix.org/" onclick="javascript:urchinTracker ('/outbound/article/www.postfix.org');">Postfix</a>.</p>

<div class="wp_syntax"><div class="code"><pre>$ sudo aptitude install postfix -y</pre></div></div>

<h3>MySQL</h3>
<p>Instalamos los paquetes de <a href="http://www.mysql.com/" onclick="javascript:urchinTracker ('/outbound/article/www.mysql.com');">MySQL</a>. Esto además nos creará el usuario mysql en nuestro sistema:</p>

<div class="wp_syntax"><div class="code"><pre>$ sudo aptitude install mysql-server mysql-client libmysqlclient15-dev libmysql-ruby -y</pre></div></div>

<p>Configuraremos una contraseña para el usuario root de la base de datos:</p>

<div class="wp_syntax"><div class="code"><pre>$ mysqladmin -u root password mipassword</pre></div></div>

<h3>Ruby</h3>
<p>La versión de Ruby paquetizada en debian 4.0 es la 1.8.5. Si quisiéramos una versión superior, deberíamos compilar Ruby desde el código fuente.</p>
<p>Nosotros instalaremos los paquetes disponibles para debian. Para ello:</p>

<div class="wp_syntax"><div class="code"><pre>$ sudo aptitude install ruby1.8-dev ruby1.8 ri1.8 rdoc1.8 irb1.8 libreadline-ruby1.8 libruby1.8 libopenssl-ruby -y</pre></div></div>

<p>A continuación crearemos los siguientes enlaces:</p>

<div class="wp_syntax"><div class="code"><pre>$ sudo ln -s /usr/bin/ruby1.8 /usr/local/bin/ruby
$ sudo ln -s /usr/bin/ri1.8 /usr/local/bin/ri
$ sudo ln -s /usr/bin/rdoc1.8 /usr/local/bin/rdoc
$ sudo ln -s /usr/bin/irb1.8 /usr/local/bin/irb
$ sudo ln -s /usr/bin/gem /usr/local/bin/gem</pre></div></div>

<h3>Rubygems</h3>
<p><a href="http://www.rubygems.org/" onclick="javascript:urchinTracker ('/outbound/article/www.rubygems.org');">Rubygems</a> es la herramienta para gestionar librerías y programas Ruby en forma de paquetes. Instalaremos Rubygems compilando el código fuente. Para ello, nos crearemos, en el directorio raíz de nuestro usuario, un directorio llamado sources. En él haremos:</p>

<div class="wp_syntax"><div class="code"><pre>$ mkdir sources
$ cd sources
$ wget http://rubyforge.org/frs/download.php/38646/rubygems-1.2.0.tgz
$ tar xzvf rubygems-1.2.0.tgz
$ cd rubygems-1.2.0
$ sudo ruby setup.rb
$ sudo ln -s /usr/bin/gem1.8 /usr/bin/gem
$ sudo gem update
$ sudo gem update --system
$ gem -v
1.2.0</pre></div></div>

<p>Con esto habremos instalado la versión 1.2 de Rubygems. Comprueba cuál es la última versión estable cuando sigas estas instrucciones.</p>
<h3>Rails</h3>
<p>En teoría, si hemos congelado <a href="http://rubyonrails.com/" onclick="javascript:urchinTracker ('/outbound/article/rubyonrails.com');">Rails</a> en el directorio vendor de nuestra aplicación, no es necesario disponer de una instalación de Rails global en la máquina. A pesar de ello, si quisiéramos instalar Rails:</p>

<div class="wp_syntax"><div class="code"><pre>$ sudo gem install rails --include-dependencies --no-rdoc -no-ri</pre></div></div>

<p>Esto me instalaría la gema rails y las gemas de las que depende. Como veis, gracias a que Rails está paquetizado en gemas, el proceso de instalación es muy sencillo.</p>
<p>Si hemos congelado en vendor Rails 1.2, no tendremos todas las gemas necesarias. En este caso deberíamos al menos instalar la gema actionwebservice y las que dependen de ella:</p>

<div class="wp_syntax"><div class="code"><pre>$ sudo gem install actionwebservice --include-dependencies --no-rdoc -no-ri</pre></div></div>

<h3>RMagick</h3>
<p>Una librería Ruby que es frecuente utilizar es <a href="http://rmagick.rubyforge.org/" onclick="javascript:urchinTracker ('/outbound/article/rmagick.rubyforge.org');">RMagick</a>. Para que funcione, deberemos instalar ImageMagick en nuestro sistema:</p>

<div class="wp_syntax"><div class="code"><pre>$ sudo aptitude install imagemagick librmagick-ruby1.8 librmagick-ruby-doc libfreetype6-dev xml-core -y</pre></div></div>

<p>Y para comprobar que funciona correctamente:</p>

<div class="wp_syntax"><div class="code"><pre>$ irb
irb(main):001:0&gt; require 'RMagick'
=&gt; true</pre></div></div>

<h3>Tutorial completo</h3>
<ul>
<li><a href="http://javiervidal.net/rails-produccion-1" >Rails en producción - Parte 1 - Introducción</a></li>
<li><a href="http://javiervidal.net/rails-produccion-2" >Rails en producción - Parte 2 - Configuración del servidor debian</a></li>
<li><a href="http://javiervidal.net/rails-produccion-3" >Rails en producción - Parte 3 - MySQL, Ruby y Rails</a></li>
<li><a href="http://javiervidal.net/rails-produccion-4" >Rails en producción - Parte 4 - Servidor web nginx</a></li>
<li><a href="http://javiervidal.net/rails-produccion-5" >Rails en producción - Parte 5 - Mongrels e instalación de nuestra aplicación</a></li>
<li><a href="http://javiervidal.net/rails-produccion-6" >Rails en producción - Parte 6 - Cluster de mongrels</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/javiervidal_ruby_rails/~4/QGKD4tfHmSg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://javiervidal.net/rails-produccion-3/feed/</wfw:commentRss>
		<feedburner:origLink>http://javiervidal.net/rails-produccion-3/</feedburner:origLink></item>
	</channel>
</rss>
