<?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>Mon, 25 Apr 2011 06:17:13 +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>Artículos interesantes</title>
		<link>http://apuntes.zafirweb.com/2011/articulos-interesantes/</link>
		<comments>http://apuntes.zafirweb.com/2011/articulos-interesantes/#comments</comments>
		<pubDate>Mon, 25 Apr 2011 06:13:25 +0000</pubDate>
		<dc:creator>Administrador</dc:creator>
		
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://apuntes.zafirweb.com/?p=94</guid>
		<description><![CDATA[Por falta de tiempo no puedo resumirlos en post separados pero creo que es útil contar con estos enlaces.
ActiveRecord y el uso de :include
Link to remote, sus callbacks y donde escribir el codigo ligado a Ajax
http://railsthreads.tk/2010/03/05/que-es-rjs/
Google maps saving dragable directions
Understanding Ruby and Rails: extract_options! from Arrays
Understanding Ruby and Rails: Delegate
Información de las rutas de Google [...]]]></description>
			<content:encoded><![CDATA[<p>Por falta de tiempo no puedo resumirlos en post separados pero creo que es útil contar con estos enlaces.</p>
<p><a href="http://railsthreads.tk/2010/03/08/activerecord-y-el-uso-de-include/">ActiveRecord y el uso de :include</a><br />
<a href="http://railsthreads.tk/2010/03/04/link-to-remote-animaciones/">Link to remote, sus callbacks y donde escribir el codigo ligado a Ajax</a><br />
<a href="http://railsthreads.tk/2010/03/05/que-es-rjs/">http://railsthreads.tk/2010/03/05/que-es-rjs/</a><br />
<a href="http://stackoverflow.com/questions/4657860/google-maps-saving-dragable-directions">Google maps saving dragable directions</a><br />
<a href="http://www.simonecarletti.com/blog/2009/09/inside-ruby-on-rails-extract_options-from-arrays/">Understanding Ruby and Rails: extract_options! from Arrays</a><br />
<a href="http://www.simonecarletti.com/blog/2009/12/inside-ruby-on-rails-delegate/">Understanding Ruby and Rails: Delegate</a><br />
<a href="http://econym.org.uk/gmap/example_steps.htm">Información de las rutas de Google Maps personalizada</a><br />
<a href="http://json.org/js.html">JSON in JavaScript</a><br />
<a href="http://rails-bestpractices.com/posts/65-comment-your-magic-codes">comment your magic codes</a><br />
<a href="http://rails-bestpractices.com/">Rails Best Practices</a><br />
<a href="http://rails-bestpractices.com/posts/59-use-memoization">Use memoization</a></p>
]]></content:encoded>
			<wfw:commentRss>http://apuntes.zafirweb.com/2011/articulos-interesantes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ruby para impacientes</title>
		<link>http://apuntes.zafirweb.com/2011/ruby-para-impacientes/</link>
		<comments>http://apuntes.zafirweb.com/2011/ruby-para-impacientes/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 11:24:30 +0000</pubDate>
		<dc:creator>Administrador</dc:creator>
		
		<category><![CDATA[Varios]]></category>

		<guid isPermaLink="false">http://apuntes.zafirweb.com/?p=92</guid>
		<description><![CDATA[Interesantes apuntes para empezar a usar Ruby
Ruby para Impacientes -> http://geneura.ugr.es/~jmerelo/tutoriales/ruby-para-impacientes/
]]></description>
			<content:encoded><![CDATA[<p>Interesantes apuntes para empezar a usar Ruby</p>
<p>Ruby para Impacientes -> http://geneura.ugr.es/~jmerelo/tutoriales/ruby-para-impacientes/</p>
]]></content:encoded>
			<wfw:commentRss>http://apuntes.zafirweb.com/2011/ruby-para-impacientes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Problema con Mongrel y los HEADERS</title>
		<link>http://apuntes.zafirweb.com/2011/problema-con-mongrel-y-los-headers/</link>
		<comments>http://apuntes.zafirweb.com/2011/problema-con-mongrel-y-los-headers/#comments</comments>
		<pubDate>Mon, 04 Apr 2011 09:35:33 +0000</pubDate>
		<dc:creator>Administrador</dc:creator>
		
		<category><![CDATA[Programación]]></category>

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

		<guid isPermaLink="false">http://apuntes.zafirweb.com/?p=84</guid>
		<description><![CDATA[Resulta que al desplegar una app con un servidor mongrel me fallan las funciones ajax. Mirando el archivo de logs de mongrel veo lo siguiente:



&#160;


tail -n 100 log/mongrel.log


&#160;


Error calling Dispatcher.dispatch #&#60;NoMethodError: You have a nil object when you didn&#8216;t expect it!


You might have expected an instance of Array.


The error occurred while evaluating nil.split&#62;


/usr/local/lib/ruby/gems/1.8/gems/actionpack-2.3.11/lib/action_controller/cgi_process.rb:54:in `dispatch_cgi&#8217;


&#160;



A través [...]]]></description>
			<content:encoded><![CDATA[<p>Resulta que al desplegar una app con un servidor mongrel me fallan las funciones ajax. Mirando el archivo de logs de mongrel veo lo siguiente:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">tail</span> -n <span class="nu0">100</span> log/mongrel.log</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Error calling Dispatcher.dispatch <span class="re3">#&lt;NoMethodError: You have a nil object when you didn</span><span class="st0">&#8216;t expect it!</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0">You might have expected an instance of Array.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">The error occurred while evaluating nil.split&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">/usr/local/lib/ruby/gems/1.8/gems/actionpack-2.3.11/lib/action_controller/cgi_process.rb:54:in `dispatch_cgi&#8217;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>A través de aquí meentero que es problema del action pack y modifico el archivo cgi_process.rb:54</p>
<p>cambio:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">if</span> headers.<span class="kw1">include</span>?<span class="br0">&#40;</span><span class="st0">&#8216;Set-Cookie&#8217;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>por :</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">if</span> headers<span class="br0">&#91;</span><span class="st0">&#8216;Set-Cookie&#8217;</span><span class="br0">&#93;</span></div>
</li>
</ol>
</div>
<p>Reinicio el servidor y andado!!</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;mongrel_rails stop -<span class="kw3">P</span> log/mongrel3001.<span class="me1">pi</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;mongrel_rails start -d -e development -<span class="kw3">p</span> <span class="nu0">3001</span> -<span class="kw3">P</span> log/mongrel3001.<span class="me1">pi</span>&lt;/code&gt;</div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://apuntes.zafirweb.com/2011/problema-con-mongrel-y-los-headers/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Internacionalización en Rails</title>
		<link>http://apuntes.zafirweb.com/2010/internacionalizacion-en-rails/</link>
		<comments>http://apuntes.zafirweb.com/2010/internacionalizacion-en-rails/#comments</comments>
		<pubDate>Sat, 23 Oct 2010 07:35:38 +0000</pubDate>
		<dc:creator>Administrador</dc:creator>
		
		<category><![CDATA[Varios]]></category>

		<guid isPermaLink="false">http://apuntes.zafirweb.com/?p=81</guid>
		<description><![CDATA[Manual muy completo para internacionalizar una aplicación rails.
http://guides.rubyonrails.org/i18n.html
]]></description>
			<content:encoded><![CDATA[<p>Manual muy completo para internacionalizar una aplicación rails.</p>
<p>http://guides.rubyonrails.org/i18n.html</p>
]]></content:encoded>
			<wfw:commentRss>http://apuntes.zafirweb.com/2010/internacionalizacion-en-rails/feed/</wfw:commentRss>
		</item>
		<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>
	</channel>
</rss>

