<?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/"
	>

<channel>
	<title>Apuntes Rails</title>
	<atom:link href="http://apuntes.zafirweb.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://apuntes.zafirweb.com</link>
	<description>Apuntes de Ruby on Rails, programación en GNU/Linux y Mac</description>
	<pubDate>Thu, 17 Dec 2009 19:56:18 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Adjuntar archivos con Rails</title>
		<link>http://apuntes.zafirweb.com/2009/adjuntar-archivos-con-rails/</link>
		<comments>http://apuntes.zafirweb.com/2009/adjuntar-archivos-con-rails/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 19:56:18 +0000</pubDate>
		<dc:creator>Administrador</dc:creator>
		
		<category><![CDATA[Varios]]></category>

		<guid isPermaLink="false">http://apuntes.zafirweb.com/?p=78</guid>
		<description><![CDATA[Interesante artículo para adjuntar archivos con Rails
http://jimneath.org/2008/05/15/swfupload-paperclip-and-ruby-on-rails/
]]></description>
			<content:encoded><![CDATA[<p>Interesante artículo para adjuntar archivos con Rails</p>
<p>http://jimneath.org/2008/05/15/swfupload-paperclip-and-ruby-on-rails/</p>
]]></content:encoded>
			<wfw:commentRss>http://apuntes.zafirweb.com/2009/adjuntar-archivos-con-rails/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Relaciones Muchos a muchos con tablas &#8220;no railianas&#8221;</title>
		<link>http://apuntes.zafirweb.com/2009/relaciones-muchos-a-muchos-con-tablas-no-railianas/</link>
		<comments>http://apuntes.zafirweb.com/2009/relaciones-muchos-a-muchos-con-tablas-no-railianas/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 01:05:45 +0000</pubDate>
		<dc:creator>Administrador</dc:creator>
		
		<category><![CDATA[Varios]]></category>

		<guid isPermaLink="false">http://apuntes.zafirweb.com/?p=65</guid>
		<description><![CDATA[Si tenemos que usar BD ya existentes y no podemos adaptarlas a Rails&#8230; tendremos que adaptar rails a la BD.
Tenemos las siguientes relaciones en la BD




Equipos 
 Equiposprotocolos 
 Protocolos


pkequipos
pkequiposprotocolos
pkprotocolos



fkequipos




fkprotocolos





Ahora vamos a crear los modelos para relacionar esta tablas con la siguiente advertencia:
IMPORTANTE: El nombre del modelo de la tabla intermedia DEBE DE SER SINGULAR!!!!
Vamos [...]]]></description>
			<content:encoded><![CDATA[<p>Si tenemos que usar BD ya existentes y no podemos adaptarlas a Rails&#8230; tendremos que adaptar rails a la BD.</p>
<p>Tenemos las siguientes relaciones en la BD</p>
<div>
<table style="text-align: center;" border="0">
<tbody>
<tr>
<td style="text-align: center;"><strong>Equipos </strong></td>
<td><strong> Equiposprotocolos </strong></td>
<td><strong> Protocolos</strong></td>
</tr>
<tr>
<td>pkequipos</td>
<td>pkequiposprotocolos</td>
<td>pkprotocolos</td>
</tr>
<tr>
<td></td>
<td>fkequipos</td>
<td></td>
</tr>
<tr>
<td></td>
<td>fkprotocolos</td>
<td></td>
</tr>
</tbody>
</table>
</div>
<p>Ahora vamos a crear los modelos para relacionar esta tablas con la siguiente advertencia:</p>
<p><strong>IMPORTANTE: El nombre del modelo de la tabla intermedia<span style="color: #993300;"> DEBE DE SER SINGULAR</span></strong>!!!!</p>
<p>Vamos a ver como quedaría</p>
<p><strong>equipos.rb</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Equipos &lt; <span class="re2">ActiveRecord::Base</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;set_table_name &nbsp;<span class="st0">&quot;equipos&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;set_primary_key <span class="st0">&quot;pkequipos&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; has_many <span class="re3">:equiposprotocolo</span> , <span class="re3">:foreign_key</span> =&gt; <span class="st0">&quot;fkequipos&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; has_many <span class="re3">:protocolos</span>, <span class="re3">:foreign_key</span> =&gt; <span class="st0">&quot;fkprotocolos&quot;</span>, <span class="re3">:through</span> =&gt; <span class="re3">:equiposprotocolo</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
</ol>
</div>
<p><strong>equiposprotocolo.rb</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Equiposprotocolo &lt; <span class="re2">ActiveRecord::Base</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">#IMPORTANTE!!! Tanto el nombre del archivo como el de la clase tienen que ser en singular para las tablas de unión!!!!</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;set_table_name &nbsp;<span class="st0">&quot;equiposprotocolos&quot;</span> <span class="co1"># El nombre de la tabla en la base de datos no importa</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;set_primary_key <span class="st0">&quot;pkequiposprotocolos&quot;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;belongs_to <span class="re3">:equipos</span> , <span class="re3">:foreign_key</span> =&gt; <span class="st0">&quot;fkequipos&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;belongs_to <span class="re3">:protocolos</span> , <span class="re3">:foreign_key</span> =&gt; <span class="st0">&quot;fkprotocolos&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
</ol>
</div>
<p><strong>protocolos.rb</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Protocolos &lt; <span class="re2">ActiveRecord::Base</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; set_table_name &nbsp;<span class="st0">&quot;protocolos&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;set_primary_key <span class="st0">&quot;pkprotocolos&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;has_many <span class="re3">:equiposprotocolo</span> , <span class="re3">:foreign_key</span> =&gt; <span class="st0">&quot;fkprotocolos&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;has_many <span class="re3">:equipos</span>, <span class="re3">:foreign_key</span> =&gt; <span class="st0">&quot;fkequipos&quot;</span>, <span class="re3">:through</span> =&gt; <span class="re3">:equiposprotocolo</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
</ol>
</div>
<p>Con esto podemos hacer por ejemplo</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">Equipos.<span class="me1">find</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span>.<span class="me1">protocolos</span></div>
</li>
<li class="li1">
<div class="de1">Protocolos.<span class="me1">find</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span>.<span class="me1">equipos</span></div>
</li>
</ol>
</div>
<p>Espero que os sea de utilidad</p>
]]></content:encoded>
			<wfw:commentRss>http://apuntes.zafirweb.com/2009/relaciones-muchos-a-muchos-con-tablas-no-railianas/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Creando un filtro fecha</title>
		<link>http://apuntes.zafirweb.com/2009/creando-un-filtro-fecha/</link>
		<comments>http://apuntes.zafirweb.com/2009/creando-un-filtro-fecha/#comments</comments>
		<pubDate>Thu, 11 Jun 2009 20:57:49 +0000</pubDate>
		<dc:creator>Administrador</dc:creator>
		
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://apuntes.zafirweb.com/?p=60</guid>
		<description><![CDATA[Aunque parezca una tontería pero siempre es util tener un partial con un selector de fecha.
Creamos un parcial por ejemplo _date_select.erb



&#60;%


name = &#34;date&#34; if name.nil?


%&#62;


&#160; &#160; &#160;&#60;%=select_day&#40;1,:prefix=&#62;name&#41;%&#62;/


&#160; &#160; &#160;&#60;%=select_month&#40;Date.today, 


:use_month_names =&#62; &#160;%w&#40; Enero Febrero Marzo Abril Mayo Junio Julio Agosto Septiembre Octubre Noviembre &#160;Diciembre&#41;,:prefix=&#62;name&#41;%&#62;/


&#160; &#160; &#160;&#60;%= select_year&#40;Date.today, :start_year =&#62; Communicationsview.first_year, :end_year =&#62;Communicationsview.last_year,:prefix=&#62;name&#41; %&#62;


&#160;



Ahora solo falta [...]]]></description>
			<content:encoded><![CDATA[<p>Aunque parezca una tontería pero siempre es util tener un partial con un selector de fecha.</p>
<p>Creamos un parcial por ejemplo _date_select.erb</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;%</div>
</li>
<li class="li1">
<div class="de1">name = <span class="st0">&quot;date&quot;</span> <span class="kw1">if</span> name.<span class="kw2">nil</span>?</div>
</li>
<li class="li1">
<div class="de1">%&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;&lt;%=select_day<span class="br0">&#40;</span><span class="nu0">1</span>,:prefix=&gt;name<span class="br0">&#41;</span>%&gt;/</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp;&lt;%=select_month<span class="br0">&#40;</span><span class="kw4">Date</span>.<span class="me1">today</span>, </div>
</li>
<li class="li1">
<div class="de1"><span class="re3">:use_month_names</span> =&gt; &nbsp;%w<span class="br0">&#40;</span> Enero Febrero Marzo Abril Mayo Junio Julio Agosto Septiembre Octubre Noviembre &nbsp;Diciembre<span class="br0">&#41;</span>,:prefix=&gt;name<span class="br0">&#41;</span>%&gt;/</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;&lt;%= select_year<span class="br0">&#40;</span><span class="kw4">Date</span>.<span class="me1">today</span>, <span class="re3">:start_year</span> =&gt; Communicationsview.<span class="me1">first_year</span>, <span class="re3">:end_year</span> =&gt;Communicationsview.<span class="me1">last_year</span>,:prefix=&gt;name<span class="br0">&#41;</span> %&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Ahora solo falta llamar desde una vista usando</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;%=render <span class="re3">:partial</span>=&gt;<span class="st0">&quot;/fijos/date_filter&quot;</span> , <span class="re3">:locals</span>=&gt;<span class="br0">&#123;</span>:name =&gt;<span class="st0">&quot;filtro[fecha]&quot;</span><span class="br0">&#125;</span> %&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Fácil, verdad?</p>
]]></content:encoded>
			<wfw:commentRss>http://apuntes.zafirweb.com/2009/creando-un-filtro-fecha/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Creación de ScreenCast en Ubuntu</title>
		<link>http://apuntes.zafirweb.com/2009/creacion-de-screencast-en-ubuntu/</link>
		<comments>http://apuntes.zafirweb.com/2009/creacion-de-screencast-en-ubuntu/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 13:32:21 +0000</pubDate>
		<dc:creator>Administrador</dc:creator>
		
		<category><![CDATA[Varios]]></category>

		<guid isPermaLink="false">http://apuntes.zafirweb.com/?p=56</guid>
		<description><![CDATA[He tenido que crear una serie de video-tutoriales para Guadalinfo y tras buscar un poco he encontrado esta herramienta:
RecordMyDesktop
Es muy fácil de usar. Para pasar los vídeos OGV a AVI solo tenemos que hacer:
mencoder mi-video.ogv -ovc xvid -xvidencopts  fixed_quant=5 -o mi-video.avi
Puede que nos falten algunas librerías:
sudo apt-get install mencoder libavformat52
Algunas aplicaciones más para crear [...]]]></description>
			<content:encoded><![CDATA[<p>He tenido que crear una serie de video-tutoriales para Guadalinfo y tras buscar un poco he encontrado esta herramienta:</p>
<p><a href="http://recordmydesktop.sourceforge.net/documentation.php">RecordMyDesktop</a></p>
<p>Es muy fácil de usar. Para pasar los vídeos OGV a AVI solo tenemos que hacer:</p>
<pre class="ruby">mencoder mi-video.ogv -ovc xvid -xvidencopts  fixed_quant=5 -o mi-video.avi</pre>
<p>Puede que nos falten algunas librerías:</p>
<pre class="ruby">sudo apt-get install mencoder libavformat52</pre>
<p>Algunas aplicaciones más para crear ScreenCast son:</p>
<p><a href="http://debugmode.com/wink/">WinK</a>: Muy recomendable. Crea en formato flash y podemos hacer la animación interactiva<br />
<a href="http://sourceforge.net/projects/camstudio/">CamStudio</a><br />
<a href="http://www.screencast-o-matic.com/">Screencast-o-Matic</a>: Crea los vídeos desde la propia web</p>
]]></content:encoded>
			<wfw:commentRss>http://apuntes.zafirweb.com/2009/creacion-de-screencast-en-ubuntu/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Problemas con Rails 2.2 y MySql</title>
		<link>http://apuntes.zafirweb.com/2009/problemas-con-rails-22-y-mysql/</link>
		<comments>http://apuntes.zafirweb.com/2009/problemas-con-rails-22-y-mysql/#comments</comments>
		<pubDate>Mon, 18 May 2009 12:03:40 +0000</pubDate>
		<dc:creator>Administrador</dc:creator>
		
		<category><![CDATA[Programación]]></category>

		<category><![CDATA[mysql]]></category>

		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://apuntes.zafirweb.com/?p=47</guid>
		<description><![CDATA[Recién actualizado Rails a su versión 2.2 me encuentro con el siguiente error:
!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.

Intento instalar la gem de mysql pero me suelta:

Building native extensions.  This could take a while...
ERROR:  Error installing mysql:
ERROR: Failed [...]]]></description>
			<content:encoded><![CDATA[<p>Recién actualizado Rails a su versión 2.2 me encuentro con el siguiente error:</p>
<p><code>!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.<br />
</code></p>
<p>Intento instalar la gem de mysql pero me suelta:</p>
<p><code><br />
Building native extensions.  This could take a while...<br />
ERROR:  Error installing mysql:<br />
ERROR: Failed to build gem native extension.</code></p>
<p>*** extconf.rb failed ***<br />
Could not create Makefile due to some reason, probably lack of<br />
necessary libraries and/or headers.  Check the mkmf.log file for more<br />
details.  You may need configuration options.</p>
<p>Bien, he dado con <a href="http://gusortiz.wordpress.com/2008/11/25/problemas-instalando-el-mysql-gem-en-ubuntu/">este post</a> donde explica que solo tenemos que instalar lo siguiente:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">sudo apt-get install libmysqlclient15-dev</div>
</li>
<li class="li1">
<div class="de1">sudo gem install mysql</div>
</li>
</ol>
</div>
<p>En mi <strong>mac</strong> me ha pasado lo mismo y e seguido <a href="http://craiccomputing.blogspot.com/2008/11/installing-rails-22-on-mac-os-x-mysql.html">este artículo</a>:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">sudo gem install mysql &#8212; &#8211;with-mysql-config=/usr/local/mysql/bin/mysql_config</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>También me he encontrado con los siguientes problemas con algunas de las aplicaciones anteriores que tenia.<br />
<code><br />
undefined method `cache_template_extensions=' for ActionView::Base:Class<br />
</code><br />
Se soluciona comentando la linea <em>cache_template_extensions = false</em> de <strong>config/environments/development.rb</strong></p>
<p>En otra aplicación me soltaba:<br />
<code><br />
uninitialized constant ApplicationController<br />
</code></p>
<p>Se soluciona haciendo</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">rake rails:update</div>
</li>
</ol>
</div>
<p>Y con el plugin filecolumn  igual:</p>
<p>Nos vamos al archivo file_column.rb y en la linea 619 ponemos</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re2">ActiveSupport::Inflector</span>.<span class="me1">underscore</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">name</span><span class="br0">&#41;</span>.<span class="me1">to_s</span></div>
</li>
</ol>
</div>
<p>Espero que os sea de ayuda</p>
]]></content:encoded>
			<wfw:commentRss>http://apuntes.zafirweb.com/2009/problemas-con-rails-22-y-mysql/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Backup de Rails usando Rake</title>
		<link>http://apuntes.zafirweb.com/2009/backup-de-rails-usando-rake/</link>
		<comments>http://apuntes.zafirweb.com/2009/backup-de-rails-usando-rake/#comments</comments>
		<pubDate>Fri, 02 Jan 2009 12:49:59 +0000</pubDate>
		<dc:creator>Pedro Marn</dc:creator>
		
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.centroguadalinfo.com/?p=20</guid>
		<description><![CDATA[Para simplificar los backups de nuestras aplicaciones podemos usar rake. Para hacernos con el es recomendable consultar el siguiente artículo Ruby on Rails Rake Tutorial
Los scripts propios los creamos en la carpeta lib/task
Vamos a crear un conjunto de acciones (task) dentro de la categoría (namespace) rbackup.
Queremos que este script nos haga un backup de la [...]]]></description>
			<content:encoded><![CDATA[<p>Para simplificar los backups de nuestras aplicaciones podemos usar rake. Para hacernos con el es recomendable consultar el siguiente artículo <a target="_blank" href="http://www.railsenvy.com/2007/6/11/ruby-on-rails-rake-tutorial">Ruby on Rails Rake Tutorial</a></p>
<p>Los scripts propios los creamos en la carpeta lib/task</p>
<p>Vamos a crear un conjunto de acciones (task) dentro de la categoría (namespace) rbackup.</p>
<p>Queremos que este script nos haga un backup de la base de datos y de algunas carpetas de public (por ejemplo la carpera upload) y que nos copie todo comprimido en un archivo accesible desde la web.</p>
<p>Lo primero que hacemos es crear el archivo <strong>lib/task/rbackup.rake</strong> y definir la categoria:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">namespace <span class="re3">:rbackup</span> <span class="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
</ol>
</div>
<p>Bien, ahora vamos a definir las acciones que vamos a necesitar</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">namespace <span class="re3">:rbackup</span> <span class="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1">desc <span class="st0">&quot;Crea los directorios tmp/backup y public/backup&quot;</span></div>
</li>
<li class="li1">
<div class="de1">task <span class="re3">:crea_dir</span> <span class="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">desc <span class="st0">&quot;Copia de seguridad de la base de datos en la carpeta tmp/backup&quot;</span></div>
</li>
<li class="li1">
<div class="de1">task <span class="re3">:base_datos</span> =&gt; <span class="re3">:crea_dir</span> <span class="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">desc <span class="st0">&quot;Crea una copia de seguridad de las carpetas indicadas&quot;</span></div>
</li>
<li class="li1">
<div class="de1">task <span class="re3">:carpetas</span> =&gt; <span class="re3">:crea_dir</span> <span class="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">desc <span class="st0">&quot;Crea una copia de la BD y de las carpetas y las comprime en pubic/backup &quot;</span></div>
</li>
<li class="li2">
<div class="de2">task <span class="re3">:all</span> =&gt; <span class="br0">&#91;</span><span class="re3">:base_datos</span>, <span class="re3">:carpetas</span><span class="br0">&#93;</span><span class="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
</ol>
</div>
<p>Ejecutando rake &#8211;task y nos da informaciÃ³n de losa task disponibles<br />
Para ejecutar estas acciones podemos poner <strong>rake rbackup:base_datos</strong> o <strong>rake rbackup:all</strong></p>
<p>Vamos a crear los task&#8230;.</p>
<p>Este nos creará los directorios si no existen</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">task <span class="re3">:crea_dir</span> <span class="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">unless</span> <span class="kw4">File</span>.<span class="me1">exist</span>?<span class="br0">&#40;</span><span class="st0">&quot;#{RAILS_ROOT}/public/backup&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">puts</span> <span class="st0">&quot;Creando directorio public/backup&quot;</span></div>
</li>
<li class="li1">
<div class="de1">sh <span class="st0">&quot;mkdir #{RAILS_ROOT}/public/backup/&quot;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">unless</span> <span class="kw4">File</span>.<span class="me1">exist</span>?<span class="br0">&#40;</span><span class="st0">&quot;#{RAILS_ROOT}/tmp/backup&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">puts</span> <span class="st0">&quot;Creando directorio tmp/backup&quot;</span></div>
</li>
<li class="li1">
<div class="de1">sh <span class="st0">&quot;mkdir #{RAILS_ROOT}/tmp/backup/&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">end</span></div>
</li>
</ol>
</div>
<p>Para hacer el backup de la base de datos  extraemos los datos del archivo database.yml para poder usarlos con el comando mysqldump</p>
<p>Como usamos YAML es necesario poner al principio del archivo <strong> require &#8216;yaml&#8217;</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">task <span class="re3">:base_datos</span> =&gt; <span class="re3">:crea_dir</span> <span class="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">@conf</span> = <span class="kw4">YAML</span>::<span class="kw3">load</span><span class="br0">&#40;</span><span class="kw4">File</span>.<span class="kw3">open</span><span class="br0">&#40;</span><span class="st0">&quot;#{RAILS_ROOT}/config/database.yml&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">@db</span> = <span class="re1">@conf</span><span class="br0">&#91;</span><span class="st0">&#8216;development&#8217;</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># Hacemos una copia de la base de datos en el directorio temporal</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw3">puts</span> <span class="st0">&quot;****** &nbsp;Creando copia de seguridad de #{@db['database']}&#8230; &nbsp;******&quot;</span></div>
</li>
<li class="li1">
<div class="de1">sh <span class="st0">&quot;mysqldump &#8211;opt &#8211;user=#{@db['username']} &#8211;password=#{@db['password']} #{@db['database']} -h #{@db['host']} &gt; tmp/backup/#{@db['database']}.sql&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
</ol>
</div>
<p>con => :crea_dir le indicamos que tiene que ejecutar antes el task crea_dir</p>
<p><strong>Nota:</strong> si no ponemos  -h #{@db['host']} puede salirnos el error <strong>mysqldump error 2002</strong></p>
<p>Ahora comprimimos las carpetas usando tar.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">desc <span class="st0">&quot;Crea una copia de seguridad de las carpetas indicadas&quot;</span></div>
</li>
<li class="li1">
<div class="de1">task <span class="re3">:carpetas</span> =&gt; <span class="re3">:crea_dir</span> <span class="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">@carpetas</span> = %w<span class="br0">&#40;</span>images uploads<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">for</span> carpeta <span class="kw1">in</span> <span class="re1">@carpetas</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw3">puts</span> <span class="st0">&quot;****** Creando copia de #{carpeta}&#8230; ******&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">system</span><span class="br0">&#40;</span><span class="st0">&quot;tar cvzf &#8216;#{RAILS_ROOT}/tmp/backup/#{carpeta}.tar.gz&#8217; &#8216;#{RAILS_ROOT}/public/#{carpeta}&#8217;&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp;unless &nbsp;system(comando)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp;flash[:error] = comando</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp;end</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
</ol>
</div>
<p>En la variable @carpetas ponemos las carpetas de pubic de las que queremos hacer el backup</p>
<p>Por ultimo hacemos un task que nos ejecute todas las acciones:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">task <span class="re3">:all</span> =&gt; <span class="br0">&#91;</span><span class="re3">:base_datos</span>, <span class="re3">:carpetas</span><span class="br0">&#93;</span><span class="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">puts</span> <span class="st0">&quot;****** &nbsp;Comprimiendo y publicando&#8230;. &nbsp;******&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">system</span><span class="br0">&#40;</span><span class="st0">&quot;tar cvzf &nbsp;&#8217;#{RAILS_ROOT}/public/backup/#{@db['database']}#{Date.today}.tar.gz&#8217; &#8216;#{RAILS_ROOT}/tmp/backup&#8217;&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">puts</span> <span class="st0">&quot;****** &nbsp;#{@db['database']}#{Date.today}.tar.gz creado &nbsp;******&quot;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw3">puts</span> <span class="st0">&quot;****** &nbsp;Borrando datos de tmp/backup&#8230; &nbsp;******&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">system</span><span class="br0">&#40;</span><span class="st0">&quot;rm -f #{RAILS_ROOT}/tmp/backup/*&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
</ol>
</div>
<p>Ya tenemos nuestro script rake terminado. Ahora podemos crear un controlador para tener acceso a los archivos generados y poder borrarlos una vez descargados.</p>
<p>Creamos un controlador rbackup_controller.rb y ponemos:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> RbackupController &lt; ApplicationController</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">def</span> index</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">@dir</span> = <span class="kw4">Dir</span>.<span class="me1">new</span><span class="br0">&#40;</span><span class="st0">&quot;#{RAILS_ROOT}/public/backup&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="re1">@archivos</span> = <span class="kw3">Array</span>.<span class="me1">new</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">@dir</span>.<span class="me1">each</span> <span class="kw1">do</span> |x|</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> x<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> != <span class="nu0">46</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">@archivos</span> = &nbsp; <span class="re1">@archivos</span> + <span class="br0">&#91;</span><span class="st0">&quot;#{x}&quot;</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">def</span> borrar</div>
</li>
<li class="li2">
<div class="de2">comando = <span class="st0">&quot;rm -f #{RAILS_ROOT}/public/backup/#{params[:archivo]}&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">unless</span> &nbsp;<span class="kw3">system</span><span class="br0">&#40;</span>comando<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">flash<span class="br0">&#91;</span><span class="re3">:error</span><span class="br0">&#93;</span> = comando</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">redirect_to <span class="re3">:action</span> =&gt; <span class="st0">&#8216;index&#8217;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
</ol>
</div>
<p>Ahora solo queda poner en la vista del controlador:</p>
<p>Listado de Archivos generados&lt;br&gt;&lt;br&gt;</p>
<p>&lt;% for archivo in @archivos %&gt;</p>
<p>&lt;%=link_to archivo, &#8220;backup/#{archivo}&#8221;%&gt; - &lt;%=number_to_human_size File.size(&#8221;#{RAILS_ROOT}/public/backup/#{archivo}&#8221;)%&gt; - &lt;%=link_to &#8220;borrar&#8221; , {:controller=&gt;:rbackup,:action=&gt;:borrar,:archivo=&gt;archivo}, :confirm =&gt;&#8221;Desea borrarlo?&#8221;%&gt;&lt;br&gt;</p>
<p>&lt;% end %&gt;<br />
y tenemos un sistema de backups básico.</p>
]]></content:encoded>
			<wfw:commentRss>http://apuntes.zafirweb.com/2009/backup-de-rails-usando-rake/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rmagick en Ubuntu 8.04</title>
		<link>http://apuntes.zafirweb.com/2008/rmagick-en-ubuntu-804/</link>
		<comments>http://apuntes.zafirweb.com/2008/rmagick-en-ubuntu-804/#comments</comments>
		<pubDate>Wed, 07 May 2008 10:37:05 +0000</pubDate>
		<dc:creator>Pedro Marn</dc:creator>
		
		<category><![CDATA[Cosas Varias]]></category>

		<guid isPermaLink="false">http://www.centroguadalinfo.com/?p=23</guid>
		<description><![CDATA[Pasos que he tenido que dar para instalar Rmagick en mi nueva Ubuntu 8.04
Siguiendo los pasos de este post me daba error al instalar la gema. La solución la he encontrado  aquí.
Resumiendo:



apt-get install imagemagick



apt-get install libmagick9-dev



apt-get install ruby1.8-dev



gem install rmagick



]]></description>
			<content:encoded><![CDATA[<p>Pasos que he tenido que dar para instalar Rmagick en mi nueva Ubuntu 8.04</p>
<p>Siguiendo los pasos de <a href="http://spejman.blogspot.com/2006/12/instalar-rmagick-en-ubuntu-gestin.html">este post</a> me daba error al instalar la gema. La solución la he encontrado  <a href="http://mentalized.net/journal/2006/01/24/no_such_file_to_load_mkmf/">aquí</a>.</p>
<p>Resumiendo:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">apt-get install imagemagick
</div>
</li>
<li class="li1">
<div class="de1">apt-get install libmagick9-dev
</div>
</li>
<li class="li1">
<div class="de1">apt-get install ruby1.8-dev
</div>
</li>
<li class="li1">
<div class="de1">gem install rmagick</div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://apuntes.zafirweb.com/2008/rmagick-en-ubuntu-804/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Scaffold con Rails 2.0</title>
		<link>http://apuntes.zafirweb.com/2008/scaffold-con-rails-20/</link>
		<comments>http://apuntes.zafirweb.com/2008/scaffold-con-rails-20/#comments</comments>
		<pubDate>Thu, 24 Jan 2008 09:36:58 +0000</pubDate>
		<dc:creator>Pedro Marn</dc:creator>
		
		<category><![CDATA[Cosas Varias]]></category>

		<guid isPermaLink="false">http://www.centroguadalinfo.com/?p=22</guid>
		<description><![CDATA[He leÃ­do aquÃ­ un artÃ­culo muy ilustrativo de la nueva forma de trabajar con scaffold en Rails 2.0. El resumen es el siguiente:

Installed Rails
#gem install rails &#8211;include-dependencies
Created an aplication with the rails command
$rails exchange
Created the databases for the application with the rake command
$ rake db:create:all
Used the script/generate command to create the scaffolding for the application
$ [...]]]></description>
			<content:encoded><![CDATA[<p>He leÃ­do <a href="http://fairleads.blogspot.com/2007/12/rails-20-and-scaffolding-step-by-step.html">aquÃ­</a> un artÃ­culo muy ilustrativo de la nueva forma de trabajar con scaffold en Rails 2.0. El resumen es el siguiente:</p>
<ul>
<li><span style="font-weight: bold">Installed Rails<br />
</span>#gem install rails &#8211;include-dependencies</li>
<li><span style="font-weight: bold">Created an aplication with the rails command<br />
</span>$rails exchange</li>
<li><span style="font-weight: bold">Created the databases for the application with the rake command<br />
</span>$ rake db:create:all</li>
<li><span style="font-weight: bold">Used the script/generate command to create the scaffolding for the application<br />
</span>$ ruby script/generate scaffold Movie title:string description:text one_sheet_url:string</li>
<li><span style="font-weight: bold">Created the database table using the generated migration file<br />
</span>$ rake db:migrate</li>
<li><span style="font-weight: bold">Started the webserver with the script/server command<br />
</span>$ ruby script/server</li>
<li><span style="font-weight: bold">Pointed our web browser to the application and started entering and editing data<br />
</span>http://localhost:3000/movies</li>
</ul>
<p><span style="font-size: 130%"><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://apuntes.zafirweb.com/2008/scaffold-con-rails-20/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Limpiando copia local de Subversion con Rsync</title>
		<link>http://apuntes.zafirweb.com/2008/limpiando-copia-local-de-subversion-con-rsync/</link>
		<comments>http://apuntes.zafirweb.com/2008/limpiando-copia-local-de-subversion-con-rsync/#comments</comments>
		<pubDate>Wed, 16 Jan 2008 09:44:48 +0000</pubDate>
		<dc:creator>Pedro Marn</dc:creator>
		
		<category><![CDATA[Cosas Varias]]></category>

		<guid isPermaLink="false">http://www.centroguadalinfo.com/?p=21</guid>
		<description><![CDATA[Si tienes una copia de un repositorio Subversion y quieres limpiar los directorios .svn es tan facil como:
rsync -rC original copia_limpia
]]></description>
			<content:encoded><![CDATA[<p>Si tienes una copia de un repositorio Subversion y quieres limpiar los directorios .svn es tan facil como:</p>
<p>rsync -rC original copia_limpia</p>
]]></content:encoded>
			<wfw:commentRss>http://apuntes.zafirweb.com/2008/limpiando-copia-local-de-subversion-con-rsync/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Creando Diagramas de nuestros proyectos</title>
		<link>http://apuntes.zafirweb.com/2007/creando-diagramas-de-nuestros-proyectos/</link>
		<comments>http://apuntes.zafirweb.com/2007/creando-diagramas-de-nuestros-proyectos/#comments</comments>
		<pubDate>Wed, 24 Oct 2007 17:51:57 +0000</pubDate>
		<dc:creator>Pedro Marn</dc:creator>
		
		<category><![CDATA[Cosas Varias]]></category>

		<guid isPermaLink="false">http://www.centroguadalinfo.com/?p=17</guid>
		<description><![CDATA[Bien, un paso mas en la gestiÃ³n de proyectos con Rails es la creaciÃ³n de diagramas antes y durante el proyecto. Lo ideal es crear un modelo UML (cosa que por desgracia casi nunca hago) antes de empezar a picar cÃ³digo. Para ello he encontrado algunas herramientas (para Mac)que nos pueden ayudar.
TaskSketch: Utilidad muy sencilla [...]]]></description>
			<content:encoded><![CDATA[<p>Bien, un paso mas en la gestiÃ³n de proyectos con Rails es la creaciÃ³n de diagramas antes y durante el proyecto. Lo ideal es crear un modelo <a href="http://es.wikipedia.org/wiki/Lenguaje_Unificado_de_Modelado">UML</a> (cosa que por desgracia casi nunca hago) antes de empezar a picar cÃ³digo. Para ello he encontrado algunas herramientas (para Mac)que nos pueden ayudar.</p>
<p><a href="http://dme.uma.pt/projects/tasksketch/">TaskSketch</a>: Utilidad muy sencilla e intuitiva. Aunque no es muy potente es muy Ãºtil para hacer diagramas que especifiquen las distintas tareas que realizarÃ¡ la aplicaciÃ³n y los diagramas de flujo.</p>
<p><a href="http://railroad.rubyforge.org/index.es.html">RailRoad</a>: Es un script Ruby que analiza nuestra aplicaciÃ³n Rails y crea un diagrama de clases. La verdad que es bastante sorprendente los diagramas que puede llegar a crear.</p>
<p>Para instalarlo solo tenemos que hacer:<strong> <em>gem install railroad </em></strong></p>
<p>Ahora ejecutamos este comando en la carpeta de nuestro proyecto:  <em><strong><code>railroad -a -i -o modelos_completo.dot -M</code></strong></em></p>
<p><a href="http://www.omnigroup.com/applications/omnigraffle/">Omnigraffle:</a> La utilidad de creaciÃ³n de diagramas mas potente que he encontrado. Puedes importar los archivos DOT generados por RailRoad, el problema, no es gratuito.</p>
<p>Por ultimo comentar que con <a href="http://www.minq.se/products/dbvis/">VbVisualizer</a> tambien se pueden generar diagramas de la base de datos.</p>
<p>Espero poner mas adelante un post de mis experiencias con estas herramientas, UML y Rails</p>
]]></content:encoded>
			<wfw:commentRss>http://apuntes.zafirweb.com/2007/creando-diagramas-de-nuestros-proyectos/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
