<?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>PotHix &#187; Gems</title>
	<atom:link href="http://pothix.com/blog/tag/gems/feed" rel="self" type="application/rss+xml" />
	<link>http://pothix.com/blog</link>
	<description>class Blog &#60; PotHix; def initialize; super end end</description>
	<lastBuildDate>Fri, 06 Aug 2010 04:18:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Crontab dentro da sua aplicação rails com whenever</title>
		<link>http://pothix.com/blog/development/crontab-dentro-da-sua-aplicacao-rails-com-whenever</link>
		<comments>http://pothix.com/blog/development/crontab-dentro-da-sua-aplicacao-rails-com-whenever#comments</comments>
		<pubDate>Wed, 02 Dec 2009 23:06:03 +0000</pubDate>
		<dc:creator>PotHix</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Gems]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://pothix.com/blog/?p=843</guid>
		<description><![CDATA[Æ!! Hoje estou aqui para falar de uma coisa que quando vi pela primeira vez ignorei por parecer uma coisa boba, mas olhando melhor eu percebi que é uma idéia bem interessante. O que a gem whenever faz é manter o seu crontab de uma forma mais Ruby, e melhor, dentro da sua aplicação! A [...]]]></description>
			<content:encoded><![CDATA[<p>Æ!!</p>

<p>Hoje estou aqui para falar de uma coisa que quando vi pela primeira vez ignorei por parecer uma coisa boba, mas olhando melhor eu percebi que é uma idéia bem interessante.
O que a gem whenever faz é manter o seu crontab de uma forma mais Ruby, e melhor, dentro da sua aplicação!</p>

<p>A principio parece estranho tentar manter o crontab dentro da sua aplicação, mas ganhamos muitas vantagens com isso:</p>

<ul>
<li>versionamento</li>
<li>menos acesso ao servidor</li>
<li>rapida atualização do crontab do servidor via capistrano</li>
<li>forma mais legível de ver o crontab</li>
</ul>

<p>E tudo isso não influi no crontab que você já possui ( e que muitas vezes tem muita coisa que não é relacionada com a aplicação ), pois o whenever cria uma seção que ele atualiza mantendo a seção antiga onde está.</p>

<p>Para instalar o whenever é a mesma facilidade de sempre:</p>


<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">   sudo gem sources -a &quot;http://gemcutter.org&quot;
   sudo gem install whenever</pre></div></div>


<p><strong>OBS</strong>: Lembrando que a primeira linha só é necessária uma vez, se você já tem o gemcutter no seu sources então ignore-a.</p>

<p>Depois disso execute:</p>


<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">   wheneverize .</pre></div></div>


<p>O comando acima vai gerar os arquivos necessários para a utilização do whenever ( básicamente o config/schedule.rb ).</p>

<p>E a partir de agora você já pode atualizar o seu crontab com as suas configurações feitas no config/schedule.rb executando o comando:</p>


<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">   whenever --update-crontab suaaplicacao</pre></div></div>


<p>Quando você passa como parametro a sua aplicação ele cria um bloco apenas para as configurações da sua aplicação no crontab.</p>

<p>Mas é claro que você não vai precisar acessar o servidor e executar esse comando toda vez que você alterar o arquivo de schedule, para isso você provavelmente deve estar usando o capistrano para ser mais DRY. Se estiver usando inclua algumas linhas no seu deploy.rb:</p>


<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">   after <span style="color:#996600;">&quot;deploy:symlink&quot;</span>, <span style="color:#996600;">&quot;deploy:update_crontab&quot;</span>
&nbsp;
   namespace <span style="color:#ff3333; font-weight:bold;">:deploy</span> <span style="color:#9966CC; font-weight:bold;">do</span>
      desc <span style="color:#996600;">&quot;Update the crontab file&quot;</span>
      task <span style="color:#ff3333; font-weight:bold;">:update_crontab</span>, <span style="color:#ff3333; font-weight:bold;">:roles</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:db</span> <span style="color:#9966CC; font-weight:bold;">do</span>
         run <span style="color:#996600;">&quot;cd #{release_path} &amp;&amp; whenever --update-crontab #{application}&quot;</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
   <span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>


<p><strong>OBS:</strong> Se você tiver problemas no deploy com essa linha ( como se o comando whenever não existisse ), tente adicionar o path absoluto para o whenever.</p>

<p>E com isso a cada vez que você fizer um cap server deploy seu crontab será atualizado com as configurações contidas no config/schedule.rb.</p>

<p>Veja alguns exemplos do que pode ter no seu schedule.rb:</p>


<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  every 4.<span style="color:#9900CC;">minutes</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    rake <span style="color:#996600;">&quot;ts:in&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  every 1.<span style="color:#9900CC;">day</span>, <span style="color:#ff3333; font-weight:bold;">:at</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'5:25 am'</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    rake <span style="color:#996600;">&quot;bla_bla&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  every <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:monday</span>, <span style="color:#ff3333; font-weight:bold;">:thursday</span><span style="color:#006600; font-weight:bold;">&#93;</span>, <span style="color:#ff3333; font-weight:bold;">:at</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'11:59 am'</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    command <span style="color:#996600;">&quot;sudo rm -rf /&quot;</span> <span style="color:#008000; font-style:italic;"># claro!</span>
  <span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>


<p>Nada do que eu demonstrei aqui é uma grande novidade, você pode ver mais exemplos de como usar no <a href="http://www.railscasts.com">Railscasts</a> e na <a href="http://github.com/javan/whenever">própria página do plugin</a>.</p>

<p>Espero que seja útil para mais alguem como está sendo para mim.</p>

<p>Há braços</p>
]]></content:encoded>
			<wfw:commentRss>http://pothix.com/blog/development/crontab-dentro-da-sua-aplicacao-rails-com-whenever/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
