<?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>Vinicius Ebersol &#187; Ruby on Rails</title>
	<atom:link href="http://vebersol.net/category/ruby-on-rails/feed/" rel="self" type="application/rss+xml" />
	<link>http://vebersol.net</link>
	<description>Blog on Rails</description>
	<lastBuildDate>Wed, 28 Dec 2011 15:22:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Vaga Desenvolvedor Ruby on Rails Senior</title>
		<link>http://vebersol.net/2011/12/28/vaga-desenvolvedor-ruby-on-rails-senior/</link>
		<comments>http://vebersol.net/2011/12/28/vaga-desenvolvedor-ruby-on-rails-senior/#comments</comments>
		<pubDate>Wed, 28 Dec 2011 13:52:41 +0000</pubDate>
		<dc:creator>Vinicius Ebersol</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://vebersol.net/?p=193</guid>
		<description><![CDATA[A Connectere AgroGestão está procurando um desenvolvedor Ruby on Rails Senior. Confira os dados da vaga abaixo: Requisitos: Ruby e RubyonRails (&#62;= 3.0) Experiência no desenvolvimento de sistemas empresariais (não somente sites institucionais e blogs) é desejado Curso superior e &#8230; <a href="http://vebersol.net/2011/12/28/vaga-desenvolvedor-ruby-on-rails-senior/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A <a title="Connectere Agro Gestão" href="http://www.connectere.agr.br/">Connectere AgroGestão</a> está procurando um desenvolvedor Ruby on Rails Senior. Confira os dados da vaga abaixo:</p>
<h2>Requisitos:</h2>
<ul>
<li>Ruby e RubyonRails (&gt;= 3.0)</li>
<li>Experiência no desenvolvimento de sistemas empresariais (não somente sites institucionais e blogs) é desejado</li>
<li>Curso superior e fluência na língua inglesa são diferenciais apreciados</li>
<li>Bons conhecimentos em git, SQL, html, haml, javascript (jQuery)</li>
</ul>
<div>
<h2>Função:</h2>
<ul>
<li>Desenvolvedor RoR Pleno/Sênior</li>
<li>Participação ativa na definição do sistema</li>
<li>Desenvolvimento das regras de negócio (métodos na camada model)</li>
<li>Desenvolvimento de testes unitários</li>
</ul>
<div></div>
<h2>Contratação:</h2>
<ul>
<li>Contratação como PJ</li>
<li>Remuneração estabelecida em comum acordo e de acordo com a experiência e conhecimentos demonstrados</li>
<li>Trabalho remoto c/ dedicação exclusiva</li>
</ul>
<p>Entrar em contato com Marcelo Lageman (<a title="rh@connectere.agr.br" href="mailto:rh@connectere.agr.br">rh@connectere.agr.br</a>)</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://vebersol.net/2011/12/28/vaga-desenvolvedor-ruby-on-rails-senior/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Substituir tag por dados do banco utilizando Ruby on Rails</title>
		<link>http://vebersol.net/2010/05/19/substituir-tag-por-dados-do-banco-utilizando-ruby-on-rails/</link>
		<comments>http://vebersol.net/2010/05/19/substituir-tag-por-dados-do-banco-utilizando-ruby-on-rails/#comments</comments>
		<pubDate>Wed, 19 May 2010 22:46:50 +0000</pubDate>
		<dc:creator>Vinicius Ebersol</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://vebersol.net/?p=144</guid>
		<description><![CDATA[Muitas vezes procuramos dar mais independência ao cliente, possibilitando o mínimo de intervenção possível em uma aplicação, por menor que seja. Hoje pela manhã, enquanto pesquisava algum CMS simples em Rails, encontrei uma funcionalidade muito interessante no Radiant, que permite &#8230; <a href="http://vebersol.net/2010/05/19/substituir-tag-por-dados-do-banco-utilizando-ruby-on-rails/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Muitas vezes procuramos dar mais independência ao cliente, possibilitando o mínimo de intervenção  possível em uma aplicação, por menor que seja. Hoje pela manhã, enquanto pesquisava algum CMS simples em Rails, encontrei uma funcionalidade muito interessante no <a href="http://radiantcms.org/">Radiant</a>, que permite ao usuário adicionar tags. Ele mostra uma popup com tags disponíveis que são métodos como: escape_html, author, date. Estes métodos são próprios do CMS e não era exatamente o que eu estava procurando no momento.</p>
<p>O que eu pensei era permitir que um usuário comum pudesse facilmente exibir um dado contido dentro do modelo Post. Por exemplo, você deseja pôr a data da última atualização dos dados. Seu objeto Post tem um campo chamado updated_at. Para pôr isso no texto a idéia é que você utilize uma tag especial que será substituída pelo dado capturado do banco. Foi pensando nisso e baseado nas tags do Radiant que eu fiz o código abaixo:</p>
<pre><span class="keyword">class</span> <span class="type">Post</span> &lt; <span class="type">ActiveRecord</span>::<span class="type">Base</span>
  belongs_to <span class="constant">:category</span>
  validates_presence_of <span class="constant">:name</span>, <span class="constant">:title</span>, <span class="constant">:body</span>, <span class="constant">:permalink</span>, <span class="constant">:user_id</span>, <span class="constant">:category_id</span>

<span class="comment-delimiter">  # </span><span class="comment">Method to replace your special tag.
</span>  <span class="keyword">def</span> <span class="function-name">self.replace_special_tags</span>(object, field)
    text = eval(<span class="string">'object.'</span>+field)
    <span class="keyword">if</span> !text.blank?
      tags = <span class="variable-name">self</span>.get_tags(text)
      <span class="keyword">if</span> !tags.blank?
        tags.each <span class="keyword">do</span> |tag|
          text = text.gsub(tag.to_s, <span class="variable-name">self</span>.get_param(tag, object))
        <span class="keyword">end</span>
      <span class="keyword">end</span>
    <span class="keyword">end</span>
    <span class="keyword">return</span> text
  <span class="keyword">end</span>

  <span class="comment-delimiter"># </span><span class="comment">After catch your tags, pass the tag and object that you need to use.
</span>  <span class="keyword">def</span> <span class="function-name">self.get_param</span>(tag, object)
    pattern = <span class="string">/[^&lt;r:].*[^ \/&gt;]/</span>
    param = tag.to_s[pattern]
    replace = object.respond_to?(param.split(<span class="string">'.'</span>).first) ? eval(<span class="string">'object.'</span>+param) : <span class="variable-name">nil</span>
    <span class="keyword">if</span> !replace.blank?
      <span class="keyword">return</span> replace.to_s
    <span class="keyword">else</span>
      <span class="keyword">return</span> <span class="string">'&lt;!-- wrong field --&gt;'</span>
    <span class="keyword">end</span>
  <span class="keyword">end</span>

  <span class="comment-delimiter"># </span><span class="comment">Get all special tags on text
</span>  <span class="keyword">def</span> <span class="function-name">self.get_tags</span>(text)
    pattern = <span class="string">/(&lt;r:[a-z\.]+ \/&gt;)/</span>
    <span class="keyword">if</span> !text.scan(pattern).blank?
      text.scan(pattern)
    <span class="keyword">end</span>
  <span class="keyword">end</span>
<span class="keyword">end</span>
</pre>
<p>O modelo acima permite exibir dados direto do banco  ao passar um objeto e o respectivo campo de texto que contém as tags especiais. Vejamos como funciona na prática:</p>
<pre><span class="type">Post</span>.replace_special_tags(<span class="variable-name">@post</span>, <span class="string">'body'</span>)</pre>
<p>Assim, todas as tags especiais que eu adicionar ao campo <em>body</em> serão substituídas pelo campo correspondente no objeto @post. Vejamos um exemplo do nosso objeto:</p>
<p><code><br />
&gt;&gt; @post<br />
=&gt; #&lt;Post id: 1, name: "Minha página de teste", title: "Titulo da minha página de teste", body: "&lt;p&gt;Ah!!&lt;/p&gt;\r\n\r\n&lt;ul&gt;\r\n  &lt;li&gt;&lt;strong&gt;Nome da categori...", permalink: "minha-pagina-de-teste", active: false, public: nil, user_id: 1, category_id: 26, created_at: "2010-05-19 21:39:52", updated_at: "2010-05-19 21:39:52"&gt;</code></p>
<p>Nesse caso, o post pertence a uma categoria:</p>
<p><code><br />
&gt;&gt; @post.category<br />
=&gt; #&lt;Category id: 26, name: "Minha categoria de teste", permalink: "minha-categoria-de-teste", parent_id: nil, created_at: "2010-05-19 22:09:16", updated_at: "2010-05-19 22:09:16"&gt;<br />
</code></p>
<p>Portanto, você pode utilizar, por exemplo:</p>
<ul>
<li>&lt;r:title /&gt;</li>
<li>&lt;r:user_id /&gt; * em breve, um relacionamento poderá permitir acesso aos dados do usuário. Mas cuidado com as permissões aqui. É muito importante limitar o uso deste recurso.</li>
<li>&lt;r:category.name /&gt;</li>
<li>&lt;r:category.permalink /&gt;</li>
</ul>
<p>Na prática, seu campo body ser assim:</p>
<pre>&lt;p&gt;My replace tags test&lt;/p&gt;
&lt;dl&gt;
  &lt;dt&gt;My category name:&lt;/dt&gt;
  &lt;dd&gt;&lt;r:category.name /&gt;&lt;/dd&gt;
  &lt;dt&gt;My category permalink:&lt;/dt&gt;
  &lt;dd&gt;&lt;r:category.permalink /&gt;&lt;/dd&gt;
  &lt;dt&gt;My post permalink:&lt;/dt&gt;
  &lt;dd&gt;&lt;r:permalink /&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;div class="breadcrumb"&gt;
  &lt;a href="/categories/&lt;r:category.permalink&gt;"&gt;&lt;span&gt;&lt;r:category.name&gt;&lt;/span&gt;&lt;/a&gt; |
  &lt;a  href="/categories/&lt;r:category.permalink&gt;/post/&lt;r:permalink&gt;"&gt;&lt;span&gt;&lt;r:name&gt;&lt;/span&gt;&lt;/a&gt;
&lt;/div&gt;</pre>
<p>Acima estão somente alguns exemplos de dados que você pode utilizar. Como o método que eu criei não limita a utilização de campos, tudo que você chamar do objeto @post será exibido, se existir. O interessante a partir daqui é pensar em criar uma lista dos dados &#8220;acessíveis&#8221; para permitir chamar somente estes, tornando a utilização deste método muito mais segura.</p>
<p>Ps.: Desculpem pelo título, porém não encontrei nada que pudesse descrever isso em poucas palavras e da forma correta. Recebo sugestões.</p>
]]></content:encoded>
			<wfw:commentRss>http://vebersol.net/2010/05/19/substituir-tag-por-dados-do-banco-utilizando-ruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>drails &#8211; Dojo + Rails</title>
		<link>http://vebersol.net/2009/09/15/drails-dojo-rails/</link>
		<comments>http://vebersol.net/2009/09/15/drails-dojo-rails/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 13:04:54 +0000</pubDate>
		<dc:creator>Vinicius Ebersol</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://vebersol.net/?p=125</guid>
		<description><![CDATA[Dica rápida para quem se interessou no post anterior sobre Dojo. Eu pesquisei e encontrei um plugin que substitui os helpers do Rails para utilizar Dojo ao invés de Prototype. É o drails. A instalação é simples: # drails relies &#8230; <a href="http://vebersol.net/2009/09/15/drails-dojo-rails/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-129 aligncenter" title="drails" src="http://vebersol.net/wp-content/uploads/2009/09/drails.png" alt="drails" width="273" height="123" /></p>
<p>Dica rápida para quem se interessou no post anterior sobre <a href="http://dojotoolkit.org/">Dojo</a>. Eu pesquisei e encontrei um plugin que substitui os helpers do <a href="http://rubyonrails.com">Rails</a> para utilizar Dojo ao invés de <a href="http://prototypejs.org/">Prototype</a>. É o <a href="http://d-rails.org/">drails</a>.</p>
<h3>A instalação é simples:</h3>
<pre># drails relies on the dojo-pkg gem.  Installing this gem can sometimes take a while
gem install dojo-pkg

cd my_rails_app
script/plugin install git://github.com/foobarfighter/drails.git</pre>
<p>Para maiores informações acesse o <a href="http://github.com/foobarfighter/drails/tree/v1.0.0">README</a> do plugin no github.</p>
]]></content:encoded>
			<wfw:commentRss>http://vebersol.net/2009/09/15/drails-dojo-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dicas para otimizar o Redmine</title>
		<link>http://vebersol.net/2009/02/25/dicas-para-otimizar-o-redmine/</link>
		<comments>http://vebersol.net/2009/02/25/dicas-para-otimizar-o-redmine/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 22:13:00 +0000</pubDate>
		<dc:creator>Vinicius Ebersol</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[A cada atualização do Redmine tenho notado as mudanças e quão significante elas são. O Redmine ainda nem chegou a versão 1.0 e na minha opinião já é significativamente melhor que alguns gerenciadores de projeto. Por exemplo, compará-lo com o &#8230; <a href="http://vebersol.net/2009/02/25/dicas-para-otimizar-o-redmine/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A cada atualização do <a href="http://redmine.org">Redmine</a> tenho notado as mudanças e quão significante elas são. O Redmine ainda nem chegou a versão 1.0 e na minha opinião já é significativamente melhor que alguns gerenciadores de projeto. Por exemplo, compará-lo com o <a href="http://www.atlassian.com/software/jira/">Jira</a> (licensa de $4,800 anuais) é piada. <strong>Redmine</strong> é software livre e muito mais completo.</p>
<p>Em sua versão padrão ele é muito bom, mas imagine que existem muitos plugins para turbinar o seu Redmine. Segue abaixo uma lista de plugins extraída da <a href="http://www.redmine.org/wiki/redmine/Plugins">wiki do Redmine</a>:</p>
<h3>Plugin list</h3>
<ul>
<li><a href="http://www.redmine.org/wiki/redmine/BotsFilterPlugin">BotsFilterPlugin</a> previne URLs contra indexação de mecanismos de busca.</li>
<li><a href="http://www.redmine.org/wiki/redmine/PluginBulkTimeEntry">Bulk Time Entry</a> adiciona múltiplas entradas de tempo de uma vez só.</li>
<li><a href="http://www.redmine.org/wiki/redmine/PluginBudget">Budget</a> é um plugin para gerenciar o conjunto de resultados de cada projecto, automaticamente calcula alguns indicadores de desempenho.</li>
<li><a href="http://www.redmine.org/wiki/redmine/PluginCollapse">Collapse</a> transforma a barra lateral padrão do Redmine para uma barra expansível.</li>
<li><a href="http://www.redmine.org/wiki/redmine/PluginCustomer">Customer</a> gerencia informações básicas do cliente e analisa os projetos deste cliente.</li>
<li><a href="http://www.redmine.org/wiki/redmine/PluginEmbedded">Embedded</a> permite enviar arquivos <span class="caps">HTML</span> (ex.: documentação auto-gerada, resultados de testes) em seu projeto.</li>
<li><a href="http://www.redmine.org/wiki/redmine/PluginExceptionHandler">Exception Handler</a> habilita o Redmine a enviar e-mails quando algum erro ou excessão ocorrer.</li>
<li><a href="http://www.redmine.org/wiki/redmine/PluginEzfaq">ezFAQ</a> gerenciador de <span class="caps">FAQ</span> para redmine.</li>
<li><a href="http://www.redmine.org/wiki/redmine/PluginEzlibrarian">ezLibrarian</a> cria um módulo que serve para a gestão de seus livros em sua empresa.</li>
<li><a href="http://www.redmine.org/wiki/redmine/PluginGoogleAnalytics">Google Analytics</a> inclui de um modo simples o Google Analytics no Redmine.</li>
<li><a href="http://www.redmine.org/wiki/redmine/PluginGoogleCalendar">Google Calendar</a> integra o Redmine com o Google Calendar.</li>
<li><a href="http://www.redmine.org/wiki/redmine/PluginProjectScores">Project Scores</a> permite ao usuário atribuir uma pontuação ao projeto, incluindo muitos critéiros de análise.</li>
<li><a href="http://github.com/yugui/redmine_rd_formatter/tree/master">RD formatter</a> permite formatar texto no estilo Ruby Doc</li>
<li><a href="http://www.redmine.org/wiki/redmine/PluginQuestion">Question</a> plugin que permite comunicação entre usuários nas tarefas.</li>
<li><a href="http://www.redmine.org/wiki/redmine/PluginSimpleCI">Simple CI</a> </li>
<li><a href="http://www.redmine.org/wiki/redmine/PluginStuffToDo">Stuff To Do</a> Permite o usuário atribuir a ordem das tarefas atribuídas a ele.</li>
<li><a href="http://www.redmine.org/wiki/redmine/PluginSystemNotification">System Notification</a> habilitao  Administrador a enviar notificações por email para usuários recem logados.</li>
<li><a href="http://www.redmine.org/wiki/redmine/PluginTimesheet">Timesheet</a> plugin para análise de horas trabalhadas de cada usuário, por projeto.</li>
</ul>
<p>Encontre mais plugins no <a href="http://github.com/search?type=Repositories&amp;language=&amp;q=redmine&amp;repo=&amp;langOverride=&amp;x=0&amp;y=0&amp;start_value=1">GitHub</a>.</p>
<p>Dica: Siga o <a href="http://www.redmine.org/wiki/redmine/Plugin_Tutorial">tutorial de como criar um plugin para o Redmine</a>.</p>
<h3>Como instalar um plugin</h3>
<p>1. Se você está usando a versão 0.7.x, você precisa instalar o <a href="http://rails-engines.org/">Rails engines plugin</a> (certifique-se de que esteja usando a versão 2.0.2 do Rails). A partir da versão 0.8.0 o <strong>Rails engines plugin</strong> já está incluso no Redmine, então não precisa seguir este passo.</p>
<pre>
ruby script/plugin install http://svn.rails-engines.org/engines/tags/rel_2.0.0/
mv vendor/plugins/rel_2.0.0 vendor/plugins/engines
</pre>
<p>2. Copie o diretório do plugin para <cite>#{RAILS_ROOT}/vendor/plugins</cite></p>
<p>3. Se o plugin requer migração, rode o seguinte comando para atualizar a sua database (faça um backup primeiro).</p>
<pre>
rake db:migrate_plugins
</pre>
<p>4. Reinicie o Redmine (siga as instruções de acordo com o servidor que você está usando).</p>
]]></content:encoded>
			<wfw:commentRss>http://vebersol.net/2009/02/25/dicas-para-otimizar-o-redmine/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Reforma na Wiki do Rails</title>
		<link>http://vebersol.net/2009/01/15/reforma-na-wiki-do-rails/</link>
		<comments>http://vebersol.net/2009/01/15/reforma-na-wiki-do-rails/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 16:55:00 +0000</pubDate>
		<dc:creator>Vinicius Ebersol</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Foi anunciado no blog Riding Rails que a wiki do Rails será reformada (revitalizada). Para dar início ao projeto, a equipe do Rails está formando um grupo de pessoas dedicadas e interessadas em colaborar nessa “revitalização”. Interessados devem ingressar no &#8230; <a href="http://vebersol.net/2009/01/15/reforma-na-wiki-do-rails/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-76" title="ror_wiki" src="http://vebersol.net/wp-content/uploads/2009/01/ror_wiki.jpg" alt="ror_wiki" width="605" height="550" /></p>
<p>Foi anunciado no blog <a href="http://weblog.rubyonrails.com/2009/1/13/activist-status-wiki-project">Riding Rails</a> que a wiki do Rails será reformada (revitalizada).</p>
<p>Para dar início ao projeto, a equipe do Rails está formando um grupo de pessoas dedicadas e interessadas em colaborar nessa “revitalização”. Interessados devem ingressar no grupo <a href="http://groups.google.com/group/rubyonrails-wiki">Ruby on Rails Wiki</a> e ler esse tópico (acredito que seja esse) <a href="http://groups.google.com/group/rubyonrails-wiki/browse_thread/thread/43f96a8536abd49c">wiki software</a>.</p>
<p><strong>Atual wiki do Rails:</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://vebersol.net/2009/01/15/reforma-na-wiki-do-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mephisto finalmente &#8220;funcionando&#8221; para mim</title>
		<link>http://vebersol.net/2008/12/29/mephisto-finalmente-funcionando-para-mim/</link>
		<comments>http://vebersol.net/2008/12/29/mephisto-finalmente-funcionando-para-mim/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 16:11:00 +0000</pubDate>
		<dc:creator>Vinicius Ebersol</dc:creator>
				<category><![CDATA[Mephisto]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Vocês devem ter notado (ou não) que eu não tenho postado muito. Um dos motivos é que eu estou trabalhando em tempo integral na Conrad Caine e em projetos particulares nas horas vagas. O outro, se deve ao fato de &#8230; <a href="http://vebersol.net/2008/12/29/mephisto-finalmente-funcionando-para-mim/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Vocês devem ter notado (ou não) que eu não tenho postado muito. Um dos motivos é que eu estou trabalhando em tempo integral na <a href="http://conrad-caine.com">Conrad Caine</a> e em projetos particulares nas horas vagas. O outro, se deve ao fato de que o meu <a href="http://mephistoblog.com">Mephisto</a> não estava funcionando direito e eu não conseguia entender o motivo.</p>
<p>Durante a semana passada fiquei animado com a possibilidade de correções de bugs com a saída da versão 0.8.1 do Mephisto, mas as mudanças para mim foram muito poucas. À excessão de que o meu blog agora roda na versão 2.2 do Rails, nada mudou.</p>
<p>O principal problema era no upload de Assets, que aparentemente funcionava, mas não exibia as thumbs na listagem e não apontava a imagem para o caminho correto. Finalmente explorando a árvore de diretórios descobri o problema na semana passada. Era o suporte multi-sites do Mephisto que estava surgindo, e os assets já estão funcionando nessa lógica, pelo menos o modelo, pois as views ainda continuavam desatualizadas.</p>
<p>Até aí tudo bem, uma mexidinha de código poderia acabar com os meus problemas, mas como eu não pretendo ter 2 blogs, isso não era o ideal.</p>
<p>Hoje pela manhã li no blog do <a href="http://www.akitaonrails.com/2008/12/29/aviso-cache-no-mephisto">Fábio Akita</a> a rápida e indolor solução para todos os meus problemas <em>“blogísticos”</em>. Se você tem este mesmo problema, siga o texto do Akita e bons posts.</p>
<p>De agora em diante, teremos um 2009 cheio de novidades e textos que estão maduros para compartilharmos.</p>
]]></content:encoded>
			<wfw:commentRss>http://vebersol.net/2008/12/29/mephisto-finalmente-funcionando-para-mim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Novo case brasileiro em Rails</title>
		<link>http://vebersol.net/2008/12/19/novo-case-brasileiro-em-rails/</link>
		<comments>http://vebersol.net/2008/12/19/novo-case-brasileiro-em-rails/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 12:15:00 +0000</pubDate>
		<dc:creator>Vinicius Ebersol</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Acabo de ler no twitter do Everton Carpes a notícia de que o site da Revista Geek está no ar. A revista da Editora Digerati desde o início do projeto resolveu mudar radicalmente, e na minha humilde opinião, para a &#8230; <a href="http://vebersol.net/2008/12/19/novo-case-brasileiro-em-rails/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-65" title="geek_20081219" src="http://vebersol.net/wp-content/uploads/2008/12/geek_20081219.png" alt="geek_20081219" width="506" height="324" /></p>
<p>Acabo de ler no <a href="http://twitter.com/everton_carpes">twitter do Everton Carpes</a> a notícia de que o site da <a href="http://geek.com.br">Revista Geek</a> está no ar.</p>
<p>A revista da <a href="http://www.digerati.com.br/">Editora Digerati</a> desde o início do projeto resolveu mudar radicalmente, e na minha humilde opinião, para a melhor. O antigo portal continha milhares de notícias e conteúdos livres dos mais variados assuntos do universo geek e tantos usuários quanto a dimensão de seu conteúdo, o que representa um site de grande expressão. O novo site, é uma mudança de conceitos e tecnologia, adotando Ruby on Rails para o desenvolvimento da aplicação, o que não diminui a sua dimensão, pode até multiplicar-se.</p>
<p>Tive uma pequena oportunidade de participar no projeto e entender que por trás desse simples e funcional conceito do site da revista geek existe uma complexidade muito grande (não confundam complexidade com aplicação mal feita).</p>
<p>Esse é mais um projeto de grandes dimensões para provar que Rails não é somente um framework para pequenas aplicações. Grandes e complexas aplicações podem sim (e no meu conceito, <span class="caps">DEVEM</span>) ser desenvolvidas em Rails.</p>
<p>Para finalizar deixo os meus parabéns a todos os envolvidos no projeto desde o início, principalmente ao Everton por levar este projeto adiante.</p>
]]></content:encoded>
			<wfw:commentRss>http://vebersol.net/2008/12/19/novo-case-brasileiro-em-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails com Passenger (em produção) em hospedagem nacional</title>
		<link>http://vebersol.net/2008/08/05/ruby-on-rails-com-passenger-em-producao-em-hospedagem-nacional/</link>
		<comments>http://vebersol.net/2008/08/05/ruby-on-rails-com-passenger-em-producao-em-hospedagem-nacional/#comments</comments>
		<pubDate>Tue, 05 Aug 2008 13:12:00 +0000</pubDate>
		<dc:creator>Vinicius Ebersol</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[A TeHospedo acaba de anunciar o lançamento do mod_rails em produção. É a primeira empresa de hospedagem brasileira a implementar o Passenger em seus servidores. Visite o Blog da TeHospedo para ler mais. Se você tem dúvidas quanto a estabilidade &#8230; <a href="http://vebersol.net/2008/08/05/ruby-on-rails-com-passenger-em-producao-em-hospedagem-nacional/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A <a href="http://tehospedo.com.br/hospedagem/?xind=vebersol.net&amp;mktid=9p">TeHospedo</a> acaba de anunciar o lançamento do mod_rails em produção. É a primeira empresa de hospedagem brasileira a implementar o Passenger em seus servidores. Visite o <a href="http://blog.tehospedo.com.br/novidades/2008-08-04/ruby-on-rails-com-passenger/">Blog da TeHospedo</a> para ler mais.</p>
<p>Se você tem dúvidas quanto a estabilidade do servidor, saiba que meu blog está rodando com Passenger há mais de um mês e não tive problemas na utilização. Recomendo!</p>
<p>Para assinar, <a href="http://tehospedo.com.br/hospedagem/?xind=vebersol.net&amp;mktid=9p">clique aqui</a></p>
]]></content:encoded>
			<wfw:commentRss>http://vebersol.net/2008/08/05/ruby-on-rails-com-passenger-em-producao-em-hospedagem-nacional/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilizando um repositório git com redMine em seu Shared Host</title>
		<link>http://vebersol.net/2008/07/10/utilizando-um-repositorio-git-com-redmine-em-seu-shared-host/</link>
		<comments>http://vebersol.net/2008/07/10/utilizando-um-repositorio-git-com-redmine-em-seu-shared-host/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 02:49:00 +0000</pubDate>
		<dc:creator>Vinicius Ebersol</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Se você tem um pequeno projeto e não tem interesse em pagar um VPS para manter seu repositório git rodando com o redMine, configurá-los em sua hospedagem padrão é uma ótima e barata idéia. Eu recém fiz e achei muito &#8230; <a href="http://vebersol.net/2008/07/10/utilizando-um-repositorio-git-com-redmine-em-seu-shared-host/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Se você tem um pequeno projeto e não tem interesse em pagar um <span class="caps">VPS</span> para manter seu repositório git rodando com o <a href="http://redmine.org">redMine</a>, configurá-los em sua hospedagem padrão é uma ótima e barata idéia. Eu recém fiz e achei muito simples fazer.</p>
<p>Antes de tudo é necessário que sua hospedagem tenha:</p>
<ul>
<li>acesso disponível via <span class="caps">SSH</span>;</li>
<li>Ruby on Rails rodando com fcgi ou mod_rails</li>
<li><span class="caps">SVN</span> instalado (opcional)</li>
<li>Git</li>
<li>Gerenciamento de chaves <span class="caps">SSH</span> pelo CPanel</li>
</ul>
<h3>Instalando o redMine</h3>
<p>A instalação do redMine é muito simples. Basta seguir os passos do próprio site do redMine, clicando <a href="http://www.redmine.org/wiki/redmine/RedmineInstall">aqui</a> e após configurar o redmine de acordo com as suas necessidades.</p>
<p>h3, Criando o repositório Git em sua máquina</p>
<p>Se você ainda não tem um repositório local, é necessário criá-lo, vamos aproveitar e criar uma aplicação Rails para já termos o que enviar ao servidor.</p>
<pre> $cd /home/usuario/workspace
 $rails my_git_project
 $cd my_git_project
 $git init
 $git add *
 $git commit -m "My first commit"</pre>
<h3>Movendo o seu repositório para o seu shared host</h3>
<p>Antes de mais nada é preciso ter em mente que só enviar o seu repositório Git por <span class="caps">FTP</span> pode não ter o funcionamento adequado. Para isso, prepare o seu repositório para ser movido.</p>
<pre> $cd ~/workspace
 $git clone - -bare my_git_project my_git_project.git
 $touch my_git_project.git/git-daemon-export-ok</pre>
<p>Pronto, agora seu repositório está pronto para rodar em seu shared host. Agora é necessário enviá-lo para o seu host. Acesse por <span class="caps">SSH</span> ou <span class="caps">FTP</span> o seu shared host e crie um diretório (que eu vou chamar de <em>src</em>) na home de seu shared host, algo como <em>/home/username/</em>. Se você quiser enviar por <span class="caps">SCP</span>, faça o seguinte:</p>
<pre> $scp ~/workspace/src/my_git_project.git username@meudominio.com:/home/username/src</pre>
<p>Pronto! Seu repositório Git já está no seu servidor e pronto para ser utilizado.</p>
<p>A partir de agora o endereço de seu repositório será algo como:</p>
<pre> $ssh://username@meudominio.com/~/src/my_git_project.git</pre>
<h3>Teste o seu repositório</h3>
<pre> $git clone ssh://username@meudominio.com/~/src/my_git_project.git</pre>
<p>Se você fizer isto, será solicitada a senha <span class="caps">SSH</span> do seu host. Digite a senha e terá o seu repositório em poucos segundos.</p>
<h3>Liberando as suas chaves <span class="caps">SSH</span></h3>
<p>Assim como o <a href="http://github.com">Github</a> você pode adicionar chaves <span class="caps">SSH</span> de sua máquina e de outros desenvolvedores que terão acesso irrestrito sem a necessidade de senha.</p>
<p><em>Atenção: Não são todos os shared hosts que têm está opção. Posso afirmar que a <a href="http://tehospedo.com.br/hospedagem/?xind=vebersol.net&amp;mktid=9p">hospedagem que eu utilizo</a> fornece esta opção.</em></p>
<p><strong><span class="caps">MUITO IMPORTANTE</span>: Quem tiver acesso irrestrito ao seu repositorio git também tera acesso irrestrito a todos os arquivos e bancos de dados do seu <em>shared host</em>.</strong></p>
<p><em>Os passos a seguir são referência do meu CPanel.</em></p>
<p><strong>Para inserir as chaves ssh de seu computador e de terceiros, faça o seguinte:</strong></p>
<p>Para ter uma chave <span class="caps">SSH</span> é necessário criá-la, para isso, recomendo que leiam <a href="http://github.com/guides/providing-your-ssh-key">esta página do Github</a>.</p>
<pre> $cd ~/.ssh
 $cat id_rsa.pub</pre>
<p>Copie o resultado sem nenhum espaço em branco do início e faça o seguinte:</p>
<p>Procure o item <strong><span class="caps">SSH</span>/Shell Access</strong> como mostra a imagem abaixo:</p>
<p><img class="aligncenter size-full wp-image-61" title="ssh_icon" src="http://vebersol.net/wp-content/uploads/2008/07/ssh_icon.jpg" alt="ssh_icon" width="512" height="110" /></p>
<p>Após clique no botão <strong>Manage <span class="caps">SSH</span> Keys</strong> e clique em <strong>Import Key</strong>.</p>
<p>Cole a sua chave <span class="caps">SSH</span> como mostra a imagem abaixo (Não preencha os demais campos):</p>
<p><img class="aligncenter size-full wp-image-62" title="import_keys" src="http://vebersol.net/wp-content/uploads/2008/07/import_keys.jpg" alt="import_keys" width="526" height="454" /></p>
<p>Após clicar em import, vá à listagem de chaves públicas (Public Keys) e clique em <strong>Manage Authorization</strong> e após clique no botão authorize.</p>
<p>Pronto! Agora você não precisa mais digitar a senha de seu <em>shared host</em> toda vez que quiser fazer um clone ou enviar seus <em>commits</em> ao repositório.</p>
]]></content:encoded>
			<wfw:commentRss>http://vebersol.net/2008/07/10/utilizando-um-repositorio-git-com-redmine-em-seu-shared-host/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bug no FCGI utilizando método POST com :multipart =&gt; true</title>
		<link>http://vebersol.net/2008/07/05/bug-no-fcgi-utilizando-metodo-post-com-multipart-true/</link>
		<comments>http://vebersol.net/2008/07/05/bug-no-fcgi-utilizando-metodo-post-com-multipart-true/#comments</comments>
		<pubDate>Sat, 05 Jul 2008 22:07:00 +0000</pubDate>
		<dc:creator>Vinicius Ebersol</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ontem ao publicar uma demo no ar, penei para descobrir porque eu não conseguia criar um novo produto durante o teste da aplicação. Utilizando o WEBRick eu conseguia criar normalmente. Seria um problema de banco de dados ou da utilização &#8230; <a href="http://vebersol.net/2008/07/05/bug-no-fcgi-utilizando-metodo-post-com-multipart-true/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ontem ao publicar uma demo no ar, penei para descobrir porque eu não conseguia criar um novo produto durante o teste da aplicação. Utilizando o WEBRick eu conseguia criar normalmente. Seria um problema de banco de dados ou da utilização da versão de alguma gem? Além disso, todos os outros formulários de criação funcionavam.</p>
<h3>O que será então?</h3>
<p>Se trata de um bug no <span class="caps">FCGI</span>. Simplesmente quando o método <strong><em>multipart</em></strong> está definido como <strong><em>true</em></strong>, ao tentar cadastrar um dado novo no banco de dados, ele não consegue direcionar o <span class="caps">POST</span> para a action <em>create</em> do seu controller. A solução é simples e indolor. No seu form de new faça o seguinte:</p>
<pre>
&lt;%= error_messages_for :product %&gt;

&lt;% form_for(:product, :url =&gt; "#{products_path}/", :html =&gt; { :multipart =&gt; true }) do %&gt;

  &lt;%= render :partial =&gt; 'form' %&gt;

  &lt;p&gt;
    &lt;%= submit_tag "Salvar" %&gt;
  &lt;/p&gt;
&lt;% end %&gt;
</pre>
<p>Note que no lugar de @products eu pus :product, :url =&gt; ”#{products_path}/”, isto porque o bug somente ocorre pela falta da barra após o nome do controller. Se a action do form estiver somente <strong>”/products”</strong> ele irá entender que você quer acessar a action index e não o create. Com a barra no final da action tudo vai funcionar perfeitamente.</p>
<p>Qualquer dúvida, comente, talvez hajam soluções melhores.</p>
<p>O crédito para o descobrimento deste bug é para o Everton Carpes.</p>
]]></content:encoded>
			<wfw:commentRss>http://vebersol.net/2008/07/05/bug-no-fcgi-utilizando-metodo-post-com-multipart-true/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

