<?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 txurdi &#187; PHP</title>
	<atom:link href="http://blog.txurdi.net/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.txurdi.net</link>
	<description>Explicar de que se trata este blog es dificil, un poco de todo lo que se me ocurra...</description>
	<lastBuildDate>Sun, 11 Apr 2010 13:29:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>La Porra sigue creciendo</title>
		<link>http://blog.txurdi.net/2009/06/02/la-porra-sigue-creciendo/</link>
		<comments>http://blog.txurdi.net/2009/06/02/la-porra-sigue-creciendo/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 16:47:51 +0000</pubDate>
		<dc:creator>txurdi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Servidor-web]]></category>
		<category><![CDATA[desarrollo-web]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[txurdi.net]]></category>
		<category><![CDATA[facebook app]]></category>
		<category><![CDATA[la porra]]></category>

		<guid isPermaLink="false">http://blog.txurdi.net/?p=274</guid>
		<description><![CDATA[
En Febrero del año pasado, con intención de aprender la API de facebook y meterme en el mundillo del desarrollo de aplicaciones, creé junto a Tabi, una aplicación de la que ya he hablado en este Blog, La Porra
La temporada del 2007-2008, acabó con 841 usuarios registrados, que hicieron 2534 apuestas.
Esta temporada, la 2008-2009, el [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.txurdi.net/wp-content/uploads/2008/05/logo-la-porra.jpg" alt="La Porra" title="La Porra" width="150" height="150" class="alignleft size-full wp-image-32" />
<p>En Febrero del año pasado, con intención de aprender la API de facebook y meterme en el mundillo del desarrollo de aplicaciones, creé junto a Tabi, una aplicación de la que ya he hablado en este Blog, <a href="http://apps.facebook.com/la_porra/">La Porra</a></p>
<p>La temporada del 2007-2008, acabó con 841 usuarios registrados, que hicieron 2534 apuestas.</p>
<p>Esta temporada, la 2008-2009, el número de visitas a crecido mucho más. Ha habido <strong>más de 8000 usuarios registrados</strong>, que han hecho <strong>más de 16.000 apuestas</strong> en <strong>más de 100.000 visitas</strong> y han dejado <strong>más de 500 comentarios</strong>.</p>
<p>Además, durante esta temporada se nos ha unido <a href="http://pelloirizar.com">Pello</a>, y nos han llamado de varias empresas para ofrecernos colaboración, que puede que el año que viene haga crecer más a nuestra pequeña.</p>
<p>Cualquier idea que se os ocurra para hacer mejorara la aplicación, siempre es bien venida&#8230;</p>
<p class="akst_link"><a href="http://blog.txurdi.net/?p=274&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_274" class="akst_share_link" rel="nofollow">Compártelo</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://blog.txurdi.net/2009/06/02/la-porra-sigue-creciendo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Curso de Aplicaciones Facebook en la Universidad de Oviedo</title>
		<link>http://blog.txurdi.net/2009/04/27/curso-de-aplicaciones-facebook-en-la-universidad-de-oviedo/</link>
		<comments>http://blog.txurdi.net/2009/04/27/curso-de-aplicaciones-facebook-en-la-universidad-de-oviedo/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 18:13:59 +0000</pubDate>
		<dc:creator>txurdi</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[RoR]]></category>
		<category><![CDATA[desarrollo-web]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[curso]]></category>
		<category><![CDATA[oviedo]]></category>

		<guid isPermaLink="false">http://blog.txurdi.net/?p=220</guid>
		<description><![CDATA[En noviembre del año pasado (más o menos) recibí un mail de un profesor de la Universidad de Oviedo, ofreciéndome impartir un curso de desarrollo de Aplicaciones para Facebook. Había contactado conmigo gracias a Txarly, creador de nvivo, a quien conocí en (creo) el Facebook Developer Garage de Madrid, al que fuí gracias a Javier [...]]]></description>
			<content:encoded><![CDATA[<p>En noviembre del año pasado (más o menos) recibí un mail de un profesor de la Universidad de Oviedo, ofreciéndome impartir un curso de desarrollo de Aplicaciones para Facebook. Había contactado conmigo gracias a <a href="http://blog.txarly.com/">Txarly</a>, creador de <a href="http://nvivo.es">nvivo</a>, a quien conocí en (creo) el Facebook Developer Garage de Madrid, al que fuí gracias a Javier Olivan, con quien contacté vía Tabi Vicuña&#8230; Que importantes son los contactos en este mundo&#8230;</p>
<p>Pero a lo que iba, que me surgió la oportunidad de dar el curso, y acepté. Ha sido el primer curso que he impartido para 30 personas (universitarios), y la experiencia ha sido impresionante. No me acordaba de lo que era la universidad y estas 2 semanas lo he recordado.</p>
<p>Han sido 30 horas de curso, 6 de teoría de redes sociales que impartió Txarly, y 24 técnicas (programación) que he impartido yo. Los asistentes, no tenían el nivel de programación que esperaba, y el temario ha sido más escaso de lo que yo pensaba, pero creo que todos hemos salido satisfechos de las clases.</p>
<p>Empecé impartiendo un pequeño curso de desarrollo web con XHTML, CSS, PHP, MySQL, que tuve que alargar más de lo debido, pero después de las bases, desarrollamos una serie de mini-aplicaciones que creo les gustó bastante. Aquí es donde podéis poner vuestros comentarios si no es así <img src='http://blog.txurdi.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p>Para finalizar el curso, por grupos, han tenido que desarrollar una aplicación, y la verdad es que todos se lo han tomado muy en serio y con muchas ganas. El viernes veremos que es lo que han conseguido, pero desde luego, todos se ganaron un punto cuando en el último descanso del curso, ni siquiera salieron de la clase, se quedaron dándole duro a la aplicación. La verdad es que eso, a mi, me hizo mucha ilusión&#8230;</p>
<p>En fin, un placer impartir este curso, y con ganas de repetir algún otro por ahí.</p>
<p class="akst_link"><a href="http://blog.txurdi.net/?p=220&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_220" class="akst_share_link" rel="nofollow">Compártelo</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://blog.txurdi.net/2009/04/27/curso-de-aplicaciones-facebook-en-la-universidad-de-oviedo/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Get y Set &#8220;mágicos&#8221; en PHP5</title>
		<link>http://blog.txurdi.net/2008/11/03/get-y-set-magicos-en-php5/</link>
		<comments>http://blog.txurdi.net/2008/11/03/get-y-set-magicos-en-php5/#comments</comments>
		<pubDate>Mon, 03 Nov 2008 09:31:38 +0000</pubDate>
		<dc:creator>txurdi</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[desarrollo-web]]></category>
		<category><![CDATA[php5 magic __set __get oo objetos]]></category>

		<guid isPermaLink="false">http://blog.txurdi.net/?p=70</guid>
		<description><![CDATA[Este POST sólo puede interesar a programadores.
Cuando programo, me gusta hacer código limpio, y a veces, escribo muchas líneas de código que luego no uso. Esto, aunque me haga perder tiempo al principio siempre me facilita el trabajo de después, lo tomo como una inversión. Por ejemplo, si tengo una clase &#8220;noticia&#8221;, relacionada con una [...]]]></description>
			<content:encoded><![CDATA[<p>Este POST sólo puede interesar a programadores.<br />
Cuando programo, me gusta hacer código limpio, y a veces, escribo muchas líneas de código que luego no uso. Esto, aunque me haga perder tiempo al principio siempre me facilita el trabajo de después, lo tomo como una inversión. Por ejemplo, si tengo una clase &#8220;noticia&#8221;, relacionada con una BBDD, de primeras le creo tantos atributos como campos tiene la tabla de la BBDD, y además los métodos guardar, borrar, modificar, buscar, dibujar etc. Pero además de esto, para hacerlo limpio, hasta ahora siempre me creaba por cada atributo, un metodo get y otro set.</p>
<pre lang="php">
class noticia {
  public $id;
  public $nombre;
  public function get_id() {
    return $this->id;
  }
  public function set_id($id) {
    $this->id = $id;
  }
  public function get_nombre() {
    return $this->nombre;
  }
  public function set_nombre($nombre) {
    $this->nombre = $nombre;
  }
  [...]
}
</pre>
<p>Esto, cuando tienes muchos atributos ( =campos en la tabla), se hace un poco tedioso y absurdo.<br />
Hoy, leyendo la <a href="http://es.php.net/manual/es/language.oop5.php">documentación de PHP5</a>, me he dado cuenta que existe un <a href="http://es.php.net/manual/es/language.oop5.overloading.php">método mágico (la sobrecarga)</a> para no tener que hacer eso así. A ver si lo puedo explicar con un ejemplo:</p>
<pre lang="php">
class noticia {
  private $id;
  private $nombre;

  public function dame_nombre() {
  //   return $this->nombre;
    return $this->__get('nombre');
  }

  private function __get($atrb) {
    switch ($atrb) {
      case '':
          return '';
      case 'nombre':
          return 'Nombre: '.$this->nombre;
      default:
        return $this->$atrb;
    }
  }

  private function __set($atrb, $val) {
    switch ($atrb) {
      case '':
          return '';
      default:
        $this->$atrb = $val;
    }
  }

  private function __isset($atrb) {
    return isset($atrb);
  }

  private function __unset($atrb) {
    unset($this->$atrb);
  }

}
</pre>
<p>De esta manera, cada vez que accedemos desde fuera de la clase a los atributos &#8220;id&#8221; o &#8220;nombre&#8221;, pasarán por las funciones especiales <strong>__get</strong> o <strong>__set</strong> dependiendo de si estamos leyendolo o escribiéndolo. Y podemos poner todos los atributos que queramos sin tener que escribir nuevas funciones get y set para cada uno.<br />
<em>Esto me va a ahorrar mucho tiempo de ahora en adelante&#8230;</em> <img src='http://blog.txurdi.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>OJO</strong>: si accedemos desde dentro de la clase al atributo directamente, no pasará por la función mágica, pero podemos forzarlo haciendo $this->__get(&#8217;nombre&#8217;);</p>
<p class="akst_link"><a href="http://blog.txurdi.net/?p=70&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_70" class="akst_share_link" rel="nofollow">Compártelo</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://blog.txurdi.net/2008/11/03/get-y-set-magicos-en-php5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MySQL, PHP, fechas e idiomas, vaya lio&#8230;</title>
		<link>http://blog.txurdi.net/2008/08/30/mysql-php-fechas-e-idiomas-vaya-lio/</link>
		<comments>http://blog.txurdi.net/2008/08/30/mysql-php-fechas-e-idiomas-vaya-lio/#comments</comments>
		<pubDate>Sat, 30 Aug 2008 13:09:09 +0000</pubDate>
		<dc:creator>txurdi</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Servidor-web]]></category>
		<category><![CDATA[desarrollo-web]]></category>
		<category><![CDATA[estándares]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[CEST]]></category>
		<category><![CDATA[CET]]></category>
		<category><![CDATA[time-zone]]></category>
		<category><![CDATA[uso horario]]></category>

		<guid isPermaLink="false">http://blog.txurdi.net/?p=64</guid>
		<description><![CDATA[Como comenté en el POST anterior, ya hemos lanzado La Porra, pero ahora quiero escribir aquí algunas conclusiones técnicas que he sacado respecto al tema de las diferencias horarias y los idiomas de las fechas tanto en MySQL como en PHP.
El servidor que uso es un Solaris, creo (Joyent me lo dio gratis y configurado), [...]]]></description>
			<content:encoded><![CDATA[<p>Como comenté en el POST anterior, ya hemos lanzado <a href="http://apps.new.facebook.com/la_porra">La Porra</a>, pero ahora quiero escribir aquí algunas conclusiones técnicas que he sacado respecto al <strong>tema de las diferencias horarias y los idiomas de las fechas tanto en MySQL como en PHP</strong>.</p>
<p>El servidor que uso es un Solaris, creo (<a href="http://joyent.com/developers/facebook/">Joyent</a> me lo dio gratis y configurado), y no sabía como cambiar la hora del sistema ni el idioma. Como no quería andar haciendo pruebas en el servidor de producción y no quería andar reiniciándolo, pensé en cambiar las configuraciones de PHP y MySQL. Aquí os dejo como lo he hecho:</p>
<p><span id="more-64"></span><br />
En Bilbao, usamos el uso horario CET ([bilbainada*] y el resto de centro Europa nos copia[/bilbainada]) en invierno y CEST en Verano.<br />
CET: Central European Time (GMT+2) (30 de Marzo &#8211; 26 de Octubre)<br />
CEST: Central European Summer Time (GMT+1) (26 de Octubre &#8211; 30 de Marzo)<br />
En el listado de usos horarios standar suele llamarse &#8220;Europe/Madrid&#8221;.</p>
<p>Pues bien, para cambiar el uso horario en PHP, en tiempo de ejecución, podemos hacerlo con <a href="http://es2.php.net/manual/es/function.date-default-timezone-set.php">date_default_timezone_set</a>:</p>
<pre lang="bash">date_default_timezone_set('CET');//o 'Europe/Madrid', pero yo no lo he conseguido hacer funcionar así, a ver que pasa cuando cambie el uso...
</pre>
<p>Y para cambiar el idioma en que se escribe la fecha, usamos <a href="http://es2.php.net/manual/es/function.setlocale.php">setlocale</a>:</p>
<pre lang="bash">setlocale(LC_ALL,'es_ES.UTF-8); //es_ES.UTF-8 tiene que estar en el sistema.
</pre>
<p>Cuando hemos cambiado setlocale, para que nos escriba Martes en vez de Tuesday, tenemos que usar la función <a href="http://es2.php.net/manual/es/function.strftime.php">strftime()</a>:</p>
<pre lang="bash">// %A - nombre completo del día de la semana de acuerdo a la localidad actual
// %B - nombre completo del mes de acuerdo a la localidad actual
// %d - día del mes como un número decimal (rango 01 a 31)
// %g - como %G, pero sin la centuria.
// %G - El año de 4-dígitos correspondiente al número de semana ISO (vea %V). Éste tiene el mismo formato y valor que %Y, con la excepción de que si el número de semana ISO pertenece al año siguiente o previo, ese año es usado en su lugar.
// %H - hora como un número decimal usando un reloj de 24 horas (rango 00 a 23)
// %I - hora como número decimal usando un reloj de 12 horas (rango 01 a 12)
// %j - dúa del año como un número decimal (rango 001 a 366)
// %m - mes como un número decimal (rango 01 a 12)
// %M - minuto como un número decimal
// %S - segundo como un número decimal
// %u - día de la semana como un número decimal [1,7], en donde 1 representa Lunes
// 'l, d \d\e F H:i'  ==>  '%A, %d de %B %H:%M'
echo strftime('%A, %d de %B %H:%M',$tiempo); //donde tiempo es un UNIX-TIMESTAMP
// Escribirá: sábado, 30 de agosto 14:45
</pre>
<p>Con eso, ya he podido ver la fecha-hora que aparece en pantalla en castellano, además de que la hora actual esté en la hora de aquí. Pero si en MySQL hago &#8220;now()&#8221; me sigue saliendo la hora del sistema. Para cambiar eso:</p>
<pre lang="bash">SET GLOBAL time_zone = 'Europe/Madrid';
</pre>
<p>(Puede que haya que reiniciar MySQL, o por lo menos salir y entrar de nuevo) Para ver si lo hemos cambiado bien:</p>
<pre lang="bash">SELECT @@global.time_zone, @@session.time_zone;
</pre>
<p>Donde pongo &#8220;Europe/Madrid&#8221;, se pueden poner otros time-zones cargados en Mysql.<br />
Cuando yo hice esto, no funcionó a la primera porque MySQL no tenía cargados los timezones, por lo que tuve que cargarlos desde el sistema, con un comando de MSQL:</p>
<pre lang="bash">mysql_tzinfo_to_sql "directorio_de_tz" | mysql -u root -p mysql
</pre>
<p>["directorio_de_tz" en mi caso era: "/usr/share/lib/zoneinfo"]<br />
Mas información sobre MySQL y este tema en <a href="http://dev.mysql.com/doc/refman/5.0/en/time-zone-support.html">la documentación de MySQL (9.7. MySQL Server Time Zone Support)</a>.<br />
</br><br />
¿conocéis otra manera de hacer esto? ¿tendré problemas más adelante? ¿que pasará cuando cambie el horario de verano? Iré actualizando este POST, tranquilos&#8230;<br />
</br></p>
<blockquote><p>Una bilbainada, a parte de un <a href="http://es.wikipedia.org/wiki/Bilbainadas">género musical</a>, es cualquier frase/acción ligeramente exagerada que sólo puede decir/hacer uno de Bilbao. Por ejemplo: <a href="http://www.guggenheim-bilbao.es/">Guggenheim Bilbao</a>, <a href="http://www.metrobilbao.net/">Metro Bilbao</a>, <a href="http://www.deia.com/es/impresa/2007/03/09/bizkaia/kirolak/345192.php">Una auténtica Bilbainada</a>, <a href="http://aberriberri.com/2008/02/29/una-bilboibainada-cuando-bilbao-ya-no-es-una-bilbainada/">Bilbainadas o no</a>, <a href="http://www.20minutos.es/noticia/188695/0/bilbainada/">Y no es una bilbainada</a> y <a href="http://www.degustalo.com/archivos/bilbainada/">Bilbainada Gastronómica</a>.</p></blockquote>
<p class="akst_link"><a href="http://blog.txurdi.net/?p=64&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_64" class="akst_share_link" rel="nofollow">Compártelo</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://blog.txurdi.net/2008/08/30/mysql-php-fechas-e-idiomas-vaya-lio/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Capitulo VIII: Resumen y listado de artículos de ayuda</title>
		<link>http://blog.txurdi.net/2008/06/17/capitulo-viii-resumen-y-listado-de-articulos-de-ayuda/</link>
		<comments>http://blog.txurdi.net/2008/06/17/capitulo-viii-resumen-y-listado-de-articulos-de-ayuda/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 18:25:05 +0000</pubDate>
		<dc:creator>txurdi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[RoR]]></category>
		<category><![CDATA[Servidor-web]]></category>
		<category><![CDATA[desarrollo-web]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[ayuda]]></category>
		<category><![CDATA[Capistrano]]></category>
		<category><![CDATA[links]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://blog.txurdi.net/2008/06/17/capitulo-viii-resumen-y-listado-de-articulos-de-ayuda/</guid>
		<description><![CDATA[Este es un artículo que forma parte de un grupo de artículos para aprender a configurar un servidor web que te pueden interesar.
Artículos seguidos para realizar este articulo:

http://articles.slicehost.com/2008/4/25/ubuntu-hardy-setup-page-1
http://articles.slicehost.com/2008/4/25/ubuntu-hardy-setup-page-2
http://articles.slicehost.com/2008/4/30/ubuntu-hardy-ruby-on-rails
http://articles.slicehost.com/2008/5/9/ubuntu-hardy-mongrel-and-mongrel-clusters
http://articles.slicehost.com/2008/4/25/ubuntu-hardy-installing-apache-and-php5
http://articles.slicehost.com/2008/5/9/ubuntu-hardy-apache-rails-and-mongrels
http://articles.slicehost.com/2007/9/5/introduction-to-svnserve
http://articles.slicehost.com/2007/9/5/using-ssh-with-svnserve
http://articles.slicehost.com/2007/9/6/multiple-projects-and-subversion
http://articles.slicehost.com/2007/9/6/multiple-repositories-and-subversion

Otros Artículos de ayuda:

Para aprender la configuración de Apache2 (a2dissite, a2ensite, a2dismod, a2enmod):

http://articles.slicehost.com/2008/4/28/ubuntu-hardy-apache-config-layout

Para configurar Apache2 de manera más optima:

http://articles.slicehost.com/2008/4/28/ubuntu-hardy-apache-configuration-1
http://articles.slicehost.com/2008/4/28/ubuntu-hardy-apache-configuration-2

Virtual Hosts en Apache:

http://articles.slicehost.com/2008/4/29/ubuntu-hardy-apache-virtual-hosts-1
http://articles.slicehost.com/2008/4/29/ubuntu-hardy-apache-virtual-hosts-2

Conceptos sobre como funcionan las llamadas cliente [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Este es un artículo que forma parte de un <a href="http://blog.txurdi.net/2008/06/17/configurar-un-servidor-web/">grupo de artículos para aprender a configurar un servidor web</a> que te pueden interesar.</p></blockquote>
<p><strong>Artículos seguidos para realizar este articulo:</strong></p>
<ul>
<li>http://articles.slicehost.com/2008/4/25/ubuntu-hardy-setup-page-1</li>
<li>http://articles.slicehost.com/2008/4/25/ubuntu-hardy-setup-page-2</li>
<li>http://articles.slicehost.com/2008/4/30/ubuntu-hardy-ruby-on-rails</li>
<li>http://articles.slicehost.com/2008/5/9/ubuntu-hardy-mongrel-and-mongrel-clusters</li>
<li>http://articles.slicehost.com/2008/4/25/ubuntu-hardy-installing-apache-and-php5</li>
<li>http://articles.slicehost.com/2008/5/9/ubuntu-hardy-apache-rails-and-mongrels</li>
<li>http://articles.slicehost.com/2007/9/5/introduction-to-svnserve</li>
<li>http://articles.slicehost.com/2007/9/5/using-ssh-with-svnserve</li>
<li>http://articles.slicehost.com/2007/9/6/multiple-projects-and-subversion</li>
<li>http://articles.slicehost.com/2007/9/6/multiple-repositories-and-subversion</li>
</ul>
<p><strong>Otros Artículos de ayuda:</strong><br />
<span id="more-59"></span><br />
Para aprender la configuración de Apache2 (a2dissite, a2ensite, a2dismod, a2enmod):</p>
<ul>
<li>http://articles.slicehost.com/2008/4/28/ubuntu-hardy-apache-config-layout</li>
</ul>
<p>Para configurar Apache2 de manera más optima:</p>
<ul>
<li>http://articles.slicehost.com/2008/4/28/ubuntu-hardy-apache-configuration-1</li>
<li>http://articles.slicehost.com/2008/4/28/ubuntu-hardy-apache-configuration-2</li>
</ul>
<p>Virtual Hosts en Apache:</p>
<ul>
<li>http://articles.slicehost.com/2008/4/29/ubuntu-hardy-apache-virtual-hosts-1</li>
<li>http://articles.slicehost.com/2008/4/29/ubuntu-hardy-apache-virtual-hosts-2</li>
</ul>
<p>Conceptos sobre como funcionan las llamadas cliente servidor, y como tener multiples dominios (vhosts):</p>
<ul>
<li>http://articles.slicehost.com/2008/5/28/how-to-serve-multiple-domains</li>
</ul>
<p>Copias de seguridad:</p>
<ul>
<li>http://articles.slicehost.com/2007/10/11/automating-a-daily-rsync-backup</li>
<li>http://articles.slicehost.com/2007/10/10/rsync-exclude-files-and-folders</li>
<li>http://articles.slicehost.com/2007/10/9/backing-up-your-files-with-rsync</li>
</ul>
<p>Subversion:</p>
<ul>
<li>http://articles.slicehost.com/subversion</li>
</ul>
<p>Capistrano:</p>
<ul>
<li>http://articles.slicehost.com/2008/1/17/capistrano-series-local-setup-and-capistrano</li>
</ul>
<p>Capítulo anterior: <a href="http://blog.txurdi.net/2008/06/17/capitulo-vii-capistrano-el-%e2%80%9cdeployador%e2%80%9d/">Capitulo VII: Capistrano el “deployador”</a><br />
Resumen: <a href="http://blog.txurdi.net/2008/06/17/configurar-un-servidor-web/">Configurar un servidor web</a></p>
<p class="akst_link"><a href="http://blog.txurdi.net/?p=59&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_59" class="akst_share_link" rel="nofollow">Compártelo</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://blog.txurdi.net/2008/06/17/capitulo-viii-resumen-y-listado-de-articulos-de-ayuda/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Capitulo VII: Capistrano el “deployador”</title>
		<link>http://blog.txurdi.net/2008/06/17/capitulo-vii-capistrano-el-%e2%80%9cdeployador%e2%80%9d/</link>
		<comments>http://blog.txurdi.net/2008/06/17/capitulo-vii-capistrano-el-%e2%80%9cdeployador%e2%80%9d/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 18:24:53 +0000</pubDate>
		<dc:creator>txurdi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[RoR]]></category>
		<category><![CDATA[Servidor-web]]></category>
		<category><![CDATA[desarrollo-web]]></category>
		<category><![CDATA[cap deploy]]></category>
		<category><![CDATA[Capistrano]]></category>
		<category><![CDATA[svn+cap]]></category>

		<guid isPermaLink="false">http://blog.txurdi.net/2008/06/17/capitulo-vii-capistrano-el-%e2%80%9cdeployador%e2%80%9d/</guid>
		<description><![CDATA[Este es un artículo que forma parte de un grupo de artículos para aprender a configurar un servidor web que te pueden interesar.
Vamos a por el siguiente paso, el que nos ayuda a &#8220;deployar&#8221;: Capistrano
Antes de nada, creamos la app Rails en nuestro proyecto:

rails project1 -c

La opción &#8220;-c&#8221;, añade todos los ficheros a subversion (pero [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Este es un artículo que forma parte de un <a href="http://blog.txurdi.net/2008/06/17/configurar-un-servidor-web/">grupo de artículos para aprender a configurar un servidor web</a> que te pueden interesar.</p></blockquote>
<p>Vamos a por el siguiente paso, el que nos ayuda a &#8220;deployar&#8221;: Capistrano<br />
Antes de nada, creamos la app Rails en nuestro proyecto:</p>
<pre lang="bash">
rails project1 -c
</pre>
<blockquote><p>La opción &#8220;-c&#8221;, añade todos los ficheros a subversion (pero sin hacer commit)</p></blockquote>
<p>Ok, ahora, vamos a decirle a Subversion que ignore algunos ficheros que no queremos que gestione en las versiones:<br />
<span id="more-58"></span></p>
<pre lang="bash">
cd project1
svn commit -m "Initial commit of project"
svn propset svn:ignore "*" log/
svn propset svn:ignore "*" tmp/
svn commit -m "added ignore to tmp and log"
</pre>
<p>Vale, tenemos el Proyecto preparado, ahora, instala Capistrano:</p>
<pre lang="bash">
sudo gem install capistrano
</pre>
<p>Para ver la versión de Capistrano instalada:</p>
<pre lang="bash">
cap -V

Capistrano v2.1.0
</pre>
<p>Lo primero que hay que hacer es decirle al proyecto que use Capistrano, ¿o a Capistrano que gestione el proyecto?, es lo mismo, &#8220;capifiar&#8221; el proyecto: (desde el root de tu aplicación)</p>
<pre lang="bash">
capify .
</pre>
<p>Esto genera dos archivos en nuestro proyecto, que tenemos que añadir a Subversion:</p>
<pre lang="bash">
svn status

?      Capfile
?      config/deploy.rb

svn add Capfile
A         Capfile

svn add config/deploy.rb
A         config/deploy.rb

svn commit -m "yay, I capified it..."
</pre>
<p>Vamos a preparar el archivo de configuración de capistrano &#8220;config/deploy.rb&#8221;<br />
Por defecto es más o menos así:</p>
<pre lang="bash">
set :application, "set your application name here"
set :repository,  "set your repository location here"

# If you aren't deploying to /u/apps/#{application} on the target
# servers (which is the default), you can specify the actual location
# via the :deploy_to variable:
# set :deploy_to, "/var/www/#{application}"

# If you aren't using Subversion to manage your source code, specify
# your SCM below:
# set :scm, :subversion

role :app, "your app-server here"
role :web, "your web-server here"
role :db,  "your db-server here", :primary => true
</pre>
<p>Tenemos que rellenarlo con nuestros datos de servidor:</p>
<pre lang="bash">
set :application, "domain.com"
set :user, "demo"
set :repository,  "svn+project1ssh://123.45.67.890/home/demo/repository/project1"
set :port, 30000
set :deploy_to, "/home/demo/public_html/#{application}"
set :location, "domain2.com"
role :app, location
role :web, location
role :db,  location, :primary => true
</pre>
<p>Suficiente, vamos a probarlo, cruza los dedos y escribe:</p>
<pre lang="bash">
cap deploy:setup
</pre>
<p>Si todo ha ido bien, tendremos una carpeta nueva en nuestro public_html del servidor, preparada para servir. Dentro de esa carpeta hay dos subcarpetas; &#8220;releases&#8221; donde se guardara la versión de producción (y las copias de seguridad de cada deploy) y &#8220;shared&#8221; donde se guardan los ficheros que no cambian (logs, pids y informaciones de systema).<br />
Ya que nuestro repositorio está en el mismo servidor que el Apache, vamos a poner las cosas un poco más simples: (cambia esto en el deploy.rb)</p>
<pre lang="bash">
set :deploy_via, :copy
</pre>
<p>Y si quieres que el usuario encargado de parar y reiniciar los Mongrels sea diferente:</p>
<pre lang="bash">
set :runner, user
</pre>
<p>Pero todavía nos queda explicarle como iniciar los Mongrel: (desde nuestro PC)</p>
<pre lang="bash">
touch script/spin
svn propset svn:executable on script/spin
</pre>
<p>En el fichero creado ay que escribir lo siguiente:</p>
<pre lang="bash">
/home/demo/public_html/domain.com/current/script/process/spawner -p 8000 -i 2 -e production
</pre>
<p>Y subirlo:</p>
<pre lang="bash">
svn add script/spin
svn commit -m "added script/spin"
</pre>
<p>Todo preparado para el primer deploy:</p>
<pre lang="bash">
cap deploy:cold
</pre>
<p>Jur jur&#8230; Si todo va bien, este comando ha hecho lo siguiente:</p>
<ul>
<li>Descarga la última versión del repositorio</li>
<li>La comprime en un archivo temporal</li>
<li>La sube al servidor</li>
<li>La descomprime</li>
<li>Copia el código donde debe y crea algunos enlaces simbólicos y demás. (lo prepara)</li>
<li>Inicia los Mongrels definidos en &#8220;script/spin&#8221;</li>
</ul>
<p>Recuerda hacer un vhost, que tenga las siguientes URLs:</p>
<pre lang="bash">
access_log --> /home/demo/public_html/domain.com/shared/log/access.log;
error_log --> /home/demo/public_html/domain.com/shared/log/error.log;
root --> /home/demo/public_html/domain.com/current/public/
</pre>
<p>Capítulo anterior: <a href="http://blog.txurdi.net/2008/06/17/capitulo-vi-gestion-de-versiones-con-subversion/">Capitulo VI: Gestión de versiones con Subversion</a><br />
Siguiente capítulo: <a href="http://blog.txurdi.net/2008/06/17/capitulo-viii-resumen-y-listado-de-articulos-de-ayuda/">Capitulo VIII: Resumen y listado de artículos de ayuda</a></p>
<p class="akst_link"><a href="http://blog.txurdi.net/?p=58&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_58" class="akst_share_link" rel="nofollow">Compártelo</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://blog.txurdi.net/2008/06/17/capitulo-vii-capistrano-el-%e2%80%9cdeployador%e2%80%9d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Capitulo VI: Gestión de versiones con Subversion</title>
		<link>http://blog.txurdi.net/2008/06/17/capitulo-vi-gestion-de-versiones-con-subversion/</link>
		<comments>http://blog.txurdi.net/2008/06/17/capitulo-vi-gestion-de-versiones-con-subversion/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 18:22:32 +0000</pubDate>
		<dc:creator>txurdi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[RoR]]></category>
		<category><![CDATA[Servidor-web]]></category>
		<category><![CDATA[desarrollo-web]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://blog.txurdi.net/2008/06/17/capitulo-vi-gestion-de-versiones-con-subversion/</guid>
		<description><![CDATA[Este es un artículo que forma parte de un grupo de artículos para aprender a configurar un servidor web que te pueden interesar.
Empecemos con el gestor de versiones: Subversion:

sudo aptitude install subversion

vamos a poner el repositorio en el mismo servidor:

mkdir /home/txurdi/repositorio
svnadmin create /home/txurdi/repositorio/project1


Esto ya lo expliqué en otro POST, por ahora lo enlazo, y cuando [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Este es un artículo que forma parte de un <a href="http://blog.txurdi.net/2008/06/17/configurar-un-servidor-web/">grupo de artículos para aprender a configurar un servidor web</a> que te pueden interesar.</p></blockquote>
<p>Empecemos con el gestor de versiones: Subversion:</p>
<pre lang="bash">
sudo aptitude install subversion
</pre>
<p>vamos a poner el repositorio en el mismo servidor:</p>
<pre lang="bash">
mkdir /home/txurdi/repositorio
svnadmin create /home/txurdi/repositorio/project1
</pre>
<p><span id="more-57"></span><br />
Esto ya lo expliqué en otro POST, por ahora lo enlazo, y cuando tenga tiempo lo edito y lo personalizo más:<br />
<a href="http://blog.txurdi.net/2008/05/05/que-es-eso-de-los-repositorsios-svn/">Que es eso de los repositorsios SVN?</a><br />
<a href="http://blog.txurdi.net/2008/05/05/usar-svn-en-una-aplicacion-web-ror/">Usar SVN en una aplicación web (RoR)</a></p>
<p>Ahora, desde tu PC, puedes descargarte el código y empezar a trabajar:</p>
<pre lang="bash">
svn co svn+project1ssh://123.45.67.890/home/txurdi/repository/project1
</pre>
<p>Capítulo anterior: <a href="http://blog.txurdi.net/2008/06/17/capitulo-v-apache-y-php-y-ror/">Capitulo V: Apache y PHP</a><br />
Siguiente capítulo: <a href="http://blog.txurdi.net/2008/06/17/capitulo-vii-capistrano-el-%e2%80%9cdeployador%e2%80%9d/">Capitulo VII: Capistrano el “deployador”</a></p>
<p class="akst_link"><a href="http://blog.txurdi.net/?p=57&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_57" class="akst_share_link" rel="nofollow">Compártelo</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://blog.txurdi.net/2008/06/17/capitulo-vi-gestion-de-versiones-con-subversion/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Capitulo V: Apache y PHP y RoR</title>
		<link>http://blog.txurdi.net/2008/06/17/capitulo-v-apache-y-php-y-ror/</link>
		<comments>http://blog.txurdi.net/2008/06/17/capitulo-v-apache-y-php-y-ror/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 13:43:44 +0000</pubDate>
		<dc:creator>txurdi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[RoR]]></category>
		<category><![CDATA[Servidor-web]]></category>
		<category><![CDATA[desarrollo-web]]></category>
		<category><![CDATA[apache2]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[vhost]]></category>

		<guid isPermaLink="false">http://blog.txurdi.net/2008/06/17/capitulo-v-apache-y-php-y-ror/</guid>
		<description><![CDATA[Este es un artículo que forma parte de un grupo de artículos para aprender a configurar un servidor web que te pueden interesar.
Ahora, instalemos Apache:

sudo aptitude install apache2 apache2.2-common apache2-mpm-prefork apache2-utils libexpat1 ssl-cert

En la instalación, dará una pequeña advertencia:

apache2: Could not reliably determine the server's fully qualified domain name,
using 127.0.0.1 for ServerName

No te preocupes, vamos [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Este es un artículo que forma parte de un <a href="http://blog.txurdi.net/2008/06/17/configurar-un-servidor-web/">grupo de artículos para aprender a configurar un servidor web</a> que te pueden interesar.</p></blockquote>
<p>Ahora, instalemos Apache:</p>
<pre lang="bash">
sudo aptitude install apache2 apache2.2-common apache2-mpm-prefork apache2-utils libexpat1 ssl-cert
</pre>
<p>En la instalación, dará una pequeña advertencia:</p>
<pre lang="bash">
apache2: Could not reliably determine the server's fully qualified domain name,
using 127.0.0.1 for ServerName
</pre>
<p>No te preocupes, vamos a solucionarlo. Abre el archivo de configuración de Apache:<br />
<span id="more-56"></span></p>
<pre lang="bash">
sudo nano /etc/apache2/apache2.conf
</pre>
<p>Y al final del archivo escribe lo siguiente:</p>
<pre lang="bash">
ServerName txurdi
</pre>
<p>Guarda el fichero y reinicia apache (reiniciando de esta manera no mata posibles conexiones abiertas)</p>
<pre lang="bash">
sudo apache2ctl graceful
</pre>
<p>Ya está, si pones tu IP (http://123.45.67.890) en <strike>Internet Explorer</strike> tu navegador favorito (firefox o safari), podrás ver la página por defecto de Apache.<br />
Breve inciso para instalar postfix:</p>
<pre lang="bash">
sudo aptitude install postfix -y
</pre>
<p>Vamos a instalar también PHP (si no necesitas saltate este paso)</p>
<pre lang="bash">
sudo aptitude install libapache2-mod-php5 php5 php5-common php5-curl php5-dev php5-gd \
php5-imagick php5-mcrypt php5-memcache php5-mhash php5-mysql php5-pspell php5-snmp \
php5-sqlite php5-xmlrpc php5-xsl
</pre>
<p>Hemos instalado unos cuantos módulos que igual no necesitas, quitalos a tu antojo.<br />
Recargamos Apache:</p>
<pre lang="bash">
sudo /etc/init.d/apache2 reload
</pre>
<p>OK, vamos a probar con una nueva aplicación de RoR:</p>
<pre lang="bash">
cd ~/public_html
rails railsapp
</pre>
<p>Vamos a aprobechar ahora para activar algunos módulos de Apache que suelen ser útiles:</p>
<pre lang="bash">
sudo a2enmod proxy
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http
sudo a2enmod rewrite
</pre>
<p>y reiniciamos Apache:</p>
<pre lang="bash">
sudo /etc/init.d/apache2 force-reload
</pre>
<p>Vamos a crear un cluster (como hemos aprendido antes)</p>
<pre lang="bash">
cd ~/public_html/railsapp
mongrel_rails cluster::configure -e production -p 5000 -N 3 -c /home/txurdi/public_html/railsapp -a 127.0.0.1
</pre>
<p>Si miramos el archivo &#8220;config/mongrel_cluster.yml&#8221;:</p>
<pre lang="bash">
cwd: /home/txurdi/public_html/railsapp
log_file: log/mongrel.log
port: "5000"
environment: production
address: 127.0.0.1
pid_file: tmp/pids/mongrel.pid
servers: 3
</pre>
<p>Creamos el enlace simbólico para que se lance al reiniciar y lo lanzamos nosotros manualmente ahora:</p>
<pre lang="bash">
sudo ln -s /home/txurdi/public_html/railsapp/config/mongrel_cluster.yml /etc/mongrel_cluster/railsapp.yml
mongrel_cluster_ctl start
</pre>
<p>Y vamos a crear un Virtual Host en Apache:</p>
<pre lang="bash">
sudo nano /etc/apache2/sites-available/txurdi.net
</pre>
<p>Escribimos lo siguiente (+o-):</p>
<pre lang="bash">
<virtualhost *:80="">
  ServerName txurdi.ner
  ServerAlias www.txurdi.net

  DocumentRoot /home/txurdi/public_html/railsapp/public

  RewriteEngine On
<proxy balancer:="" mongrel1="">
    BalancerMember http://127.0.0.1:5000
    BalancerMember http://127.0.0.1:5001
    BalancerMember http://127.0.0.1:5002
  </proxy>

  # Redirect all non-static requests to thin
  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
  RewriteRule ^/(.*)$ balancer://mongrel1%{REQUEST_URI} [P,QSA,L]

  ProxyPass / balancer://mongrel1/
  ProxyPassReverse / balancer://mongrel1/
  ProxyPreserveHost on
<proxy *="">
    Order deny,allow
    Allow from all
  </proxy>

  # Custom log file locations
  ErrorLog  /home/txurdi/public_html/railsapp/log/error.log
  CustomLog /home/txurdi/public_html/railsapp/log/access.log combined

</virtualhost>
</pre>
<p>Activamos el Virtual Host que acabamos de crear y recargamos Apache para que lo conozca:</p>
<pre lang="bash">
sudo a2ensite txurdi.net
sudo /etc/init.d/apache2 reload
</pre>
<p>Si ahora accedes via navegador a tu dominio (en nuestro caso era txurdi.net), verás la página por defecto de Rails <img src='http://blog.txurdi.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> </p>
<p>Ok, ya tenemos el server funcionando, pero ¿como hacemos modificaciones en la página? Puf, vaya liada, conectarnos por SSH y cambiar directamente con Vim o Nano. O también podríamos montarnos la carpeta principal en nuestro PC&#8230; No, no, no&#8230; eso no sería muy prudente. Vamos a ver otras posibilidades: Subversion y Capistrano.</p>
<p>Capítulo anterior: <a href="http://blog.txurdi.net/2008/06/17/capitulo-iv-mongrel/">Capitulo IV: Mongrel</a><br />
Siguiente capítulo: <a href="http://blog.txurdi.net/2008/06/17/capitulo-vi-gestion-de-versiones-con-subversion/">Capitulo VI: Gestión de versiones con Subversion</a></p>
<p class="akst_link"><a href="http://blog.txurdi.net/?p=56&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_56" class="akst_share_link" rel="nofollow">Compártelo</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://blog.txurdi.net/2008/06/17/capitulo-v-apache-y-php-y-ror/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Capitulo IV: Mongrel</title>
		<link>http://blog.txurdi.net/2008/06/17/capitulo-iv-mongrel/</link>
		<comments>http://blog.txurdi.net/2008/06/17/capitulo-iv-mongrel/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 13:26:33 +0000</pubDate>
		<dc:creator>txurdi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[RoR]]></category>
		<category><![CDATA[Servidor-web]]></category>
		<category><![CDATA[desarrollo-web]]></category>
		<category><![CDATA[Mongrel]]></category>
		<category><![CDATA[Mongrel cluster]]></category>

		<guid isPermaLink="false">http://blog.txurdi.net/2008/06/17/capitulo-iv-mongrel/</guid>
		<description><![CDATA[Este es un artículo que forma parte de un grupo de artículos para aprender a configurar un servidor web que te pueden interesar.
Instalemos Mongrel [Web oficial de Mongrel] (que es una gema, osea que simple):

sudo gem instal mongrel

Nos instalará alguna otra gema necesaria si no la tenemos ya instalada.
Mongrel tiene 3 instrucciones básicas (start, stop [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Este es un artículo que forma parte de un <a href="http://blog.txurdi.net/2008/06/17/configurar-un-servidor-web/">grupo de artículos para aprender a configurar un servidor web</a> que te pueden interesar.</p></blockquote>
<p>Instalemos Mongrel [<a href="http://mongrel.rubyforge.org/">Web oficial de Mongrel</a>] (que es una gema, osea que simple):</p>
<pre lang="bash">
sudo gem instal mongrel
</pre>
<p>Nos instalará alguna otra gema necesaria si no la tenemos ya instalada.<br />
Mongrel tiene 3 instrucciones básicas (start, stop y restart), pero se puede combinar con muchos parámetros; por ejemplo, si queremos lanzar un Mongrel escuchando en el puerto 6000, y que esté en el entorno de producción:<br />
<span id="more-55"></span></p>
<pre lang="bash">
mongrel_rails start -e production -p 6000 -d
</pre>
<blockquote><p>El &#8220;-d&#8221; del final es para lanzarlo como demonio, vamos que se queda como un proceso que no te molesta en tu terminal, y que no se muere cuando cierras el terminal.</p></blockquote>
<blockquote><p>El comando hay que lanzarlo desde la raiz de tu aplicación, &#8220;rails directory&#8221;.</p></blockquote>
<p>Vamos a ir un poco más lejos instalando un cluster de Mongrels, que son un grupo de Mongrels que funcionan en común.<br />
Primero instalamos:</p>
<pre lang="bash">
sudo gem install mongrel_cluster
</pre>
<p>Para lanzar un cluster de 2 Mongrels empezando en el puerto 8000, sería algo así:</p>
<pre lang="bash">
mongrel_rails cluster::configure -e production -p 8000 -N 2 -c /home/demo/public_html/testapp -a 127.0.0.1
</pre>
<blockquote><p>OJO: La ruta completa y si queréis mas ayuda &#8220;mongrel_rails cluster::configure -h&#8221;</p></blockquote>
<p>El comando genera un archivo en formato YAML, que puedes configurar a tu gusto si no quieres lanzarlo otra vez. El fichero queda algo como esto:</p>
<pre lang="bash">
cwd: /home/demo/public_html/testapp
log_file: log/mongrel.log
port: "8000"
environment: production
address: 127.0.0.1
pid_file: tmp/pids/mongrel.pid
servers: 2
</pre>
<p>Para iniciar, parar o reiniciar el cluster, desde la raiz de la aplicación:</p>
<pre lang="bash">
mongrel_rails cluster::start
...  o ...
mongrel_rails cluster::restart
...  o ...
mongrel_rails cluster::stop
</pre>
<p>Vamos a crear un script de inicio para que se lance el cluster cuando reiniciamos el servidor:<br />
Primero, creamos un enlace: (uno por cada aplicación que tengamos instalada)</p>
<pre lang="bash">
sudo mkdir /etc/mongrel_cluster
sudo ln -s /home/demo/public_html/testapp/config/mongrel_cluster.yml /etc/mongrel_cluster/testapp.yml
</pre>
<p>Ahora, copiamos el script de inicio de la gema en init.d, lo hacemos ejecutable y le aplicamos el runlevel:</p>
<pre lang="bash">
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
</pre>
<p>Debe ser más fácil con &#8220;thin&#8221; o &#8220;mod_rails&#8221;, pero los tengo en mi lista de TO-DO <img src='http://blog.txurdi.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
Entonces, ahora, para iniciar, parar o reiniciar:</p>
<pre lang="bash">
mongrel_cluster_ctl start
...
mongrel_cluster_ctl stop
...
mongrel_cluster_ctl restart
</pre>
<p>Y para ver si está todo ok:</p>
<pre lang="bash">
mongrel_cluster_ctl status
</pre>
<p>Lo que nos da algo como:</p>
<pre lang="bash">
Checking all mongrel_clusters...
mongrel_rails cluster::status -C testapp.yml
found pid_file: tmp/pids/mongrel.8000.pid
found mongrel_rails: port 8000, pid 2343

found pid_file: tmp/pids/mongrel.8001.pid
found mongrel_rails: port 8001, pid 2346
</pre>
<p>Capítulo anterior: <a href="http://blog.txurdi.net/2008/06/17/capitulo-iii-instalar-ruby-on-rails/">Capitulo III: Instalar Ruby on Rails</a><br />
Siguiente capítulo: <a href="http://blog.txurdi.net/2008/06/17/capitulo-v-apache-y-php-y-ror/">Capitulo V: Apache y PHP</a></p>
<p class="akst_link"><a href="http://blog.txurdi.net/?p=55&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_55" class="akst_share_link" rel="nofollow">Compártelo</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://blog.txurdi.net/2008/06/17/capitulo-iv-mongrel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Capitulo III: Instalar Ruby on Rails</title>
		<link>http://blog.txurdi.net/2008/06/17/capitulo-iii-instalar-ruby-on-rails/</link>
		<comments>http://blog.txurdi.net/2008/06/17/capitulo-iii-instalar-ruby-on-rails/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 13:16:32 +0000</pubDate>
		<dc:creator>txurdi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[RoR]]></category>
		<category><![CDATA[Servidor-web]]></category>
		<category><![CDATA[desarrollo-web]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[gema]]></category>
		<category><![CDATA[Ruby on rails]]></category>

		<guid isPermaLink="false">http://blog.txurdi.net/2008/06/17/capitulo-iii-instalar-ruby-on-rails/</guid>
		<description><![CDATA[Este es un artículo que forma parte de un grupo de artículos para aprender a configurar un servidor web que te pueden interesar.
Instalemos ruby y sqlite:

sudo aptitude install ruby1.8-dev ruby1.8 ri1.8 rdoc1.8 irb1.8 libreadline-ruby1.8 libruby1.8 libopenssl-ruby sqlite3 libsqlite3-ruby1.8

Necesitamos crear algunos simlinks:

sudo ln -s /usr/bin/ruby1.8 /usr/bin/ruby
sudo ln -s /usr/bin/ri1.8 /usr/bin/ri
sudo ln -s /usr/bin/rdoc1.8 /usr/bin/rdoc
sudo ln -s [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Este es un artículo que forma parte de un <a href="http://blog.txurdi.net/2008/06/17/configurar-un-servidor-web/">grupo de artículos para aprender a configurar un servidor web</a> que te pueden interesar.</p></blockquote>
<p>Instalemos ruby y sqlite:</p>
<pre lang="bash">
sudo aptitude install ruby1.8-dev ruby1.8 ri1.8 rdoc1.8 irb1.8 libreadline-ruby1.8 libruby1.8 libopenssl-ruby sqlite3 libsqlite3-ruby1.8
</pre>
<p>Necesitamos crear algunos simlinks:</p>
<pre lang="bash">
sudo ln -s /usr/bin/ruby1.8 /usr/bin/ruby
sudo ln -s /usr/bin/ri1.8 /usr/bin/ri
sudo ln -s /usr/bin/rdoc1.8 /usr/bin/rdoc
sudo ln -s /usr/bin/irb1.8 /usr/bin/irb
</pre>
<p>Veamos que version de ruby tenemos:<br />
<span id="more-54"></span></p>
<pre lang="bash">
ruby -v
...
ruby 1.8.6 (2007-09-24 patchlevel 111) [x86_64-linux]
</pre>
<p>Vamos a instalar rubygems desde el codigo fuente, porque es importante tener la última versión estable (y porque lo dice en el manual que traduzco <img src='http://blog.txurdi.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<pre lang="bash">
mkdir ~/sources
cd ~/sources
</pre>
<p>Descargamos la última versión (en el momento que escribo esto, dicen que la 1.1.0).<br />
Y desempaquetamos:</p>
<pre lang="bash">
wget http://rubyforge.org/frs/download.php/34638/rubygems-1.1.0.tgz
tar xzvf rubygems-1.1.0.tgz
cd  rubygems-1.1.0
</pre>
<p>Compilamos y creamos un enlace simbólico:</p>
<pre lang="bash">
sudo ruby setup.rb
...
sudo ln -s /usr/bin/gem1.8 /usr/bin/gem
</pre>
<p>Para ver la versión de gemas que acabamos de intalar:</p>
<pre lang="bash">
gem -v
...
1.1.0
</pre>
<p>Actualizamos un poco:</p>
<pre lang="bash">
sudo gem update
</pre>
<p>OJO, si tenéis un slice de poca memoria, no hagáis un <strong><strike>&#8220;sudo gem update &#8211;system&#8221;</strike></strong>, porque actualizaría a la 1.1.1 que os va a dar problemillas de memoria&#8230;<br />
Bueno, para ahorrar memoria, al instalar RAILS, lo vamos a hacer sin instalar la documentación:</p>
<pre lang="bash">
sudo gem install rails --no-rdoc --no-ri
</pre>
<p>Podemos ver la lista de gemas instaladas así:</p>
<pre lang="bash">
sudo gem list
</pre>
<p>Comprobemos que está todo bien:</p>
<pre lang="bash">
irb
#irb(main):001:0>
require 'sqlite3'
=> true
#irb(main):002:0> exit
</pre>
<p>Si no dice &#8220;true&#8221;, la has pifiado, vuelve para arriba&#8230;<br />
Si dice true, perfecto, ya está Ruby on Rails funcionando!!</p>
<p>Capítulo anterior: <a href="http://blog.txurdi.net/2008/06/17/capitulo-ii-actualizacion-del-so-y-ponerlo-bonito/">Capitulo II: Actualizacion del SO y ponerlo bonito</a><br />
Siguiente capítulo: <a href="http://blog.txurdi.net/2008/06/17/capitulo-iv-mongrel/">Capitulo IV: Mongrel</a></p>
<p class="akst_link"><a href="http://blog.txurdi.net/?p=54&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_54" class="akst_share_link" rel="nofollow">Compártelo</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://blog.txurdi.net/2008/06/17/capitulo-iii-instalar-ruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
