<?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>José Carlos Ustra Júnior &#187; José Carlos Ustra Júnior &#8211; </title>
	<atom:link href="http://ustrajunior.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ustrajunior.com</link>
	<description>Web developer</description>
	<lastBuildDate>Thu, 22 Dec 2011 17:57:17 +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>Dica rápida: instalando curb no ubuntu.</title>
		<link>http://ustrajunior.com/2011/11/13/dica-rapida-instalando-curb-no-ubuntu/</link>
		<comments>http://ustrajunior.com/2011/11/13/dica-rapida-instalando-curb-no-ubuntu/#comments</comments>
		<pubDate>Sun, 13 Nov 2011 15:02:55 +0000</pubDate>
		<dc:creator>José Carlos Ustra Júnior</dc:creator>
				<category><![CDATA[Dicas rápidas]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[curb]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://ustrajunior.com/?p=204</guid>
		<description><![CDATA[Eu precisei instalar uma gem em um sistema e ele dependia da curb. No mac instalou sem problemas, mas no ubuntu tive que instalar umas dependências antes. Caso esteja tendo problemas para instalar a curb rode: apt-get install libcurl3 libcurl3-gnutls libcurl4-openssl-dev Isso resolve o problema.]]></description>
			<content:encoded><![CDATA[<p>Eu precisei instalar uma gem em um sistema e ele dependia da <a title="curb" href="http://rubygems.org/gems/curb">curb</a>. No mac instalou sem problemas, mas no ubuntu tive que instalar umas dependências antes. Caso esteja tendo problemas para instalar a curb rode:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> libcurl3 libcurl3-gnutls libcurl4-openssl-dev</pre></div></div>

<p><strong></strong>Isso resolve o problema.</p>
]]></content:encoded>
			<wfw:commentRss>http://ustrajunior.com/2011/11/13/dica-rapida-instalando-curb-no-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando relacionamentos one-to-one no Rails</title>
		<link>http://ustrajunior.com/2011/11/07/criando-relacionamentos-one-to-one-no-rails-2/</link>
		<comments>http://ustrajunior.com/2011/11/07/criando-relacionamentos-one-to-one-no-rails-2/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 16:27:03 +0000</pubDate>
		<dc:creator>José Carlos Ustra Júnior</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[one-to-one]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[relacionamento]]></category>

		<guid isPermaLink="false">http://ustrajunior.com/?p=192</guid>
		<description><![CDATA[Sempre que criamos um sistema, precisamos criar relacionamentos entre tabelas. Os relacionamentos podem ser de alguns tipos: One to One One to Many Many to Many Eu vou demostrar aqui como criar relacionamentos One to One. Para esse exemplo, vamos considerar que um usuário possui um perfil e um perfil só pode pertencer a um [...]]]></description>
			<content:encoded><![CDATA[<p>Sempre que criamos um sistema, precisamos criar relacionamentos entre tabelas. Os relacionamentos podem ser de alguns tipos:</p>
<ul>
<li>One to One</li>
<li>One to Many</li>
<li>Many to Many</li>
</ul>
<p>Eu vou demostrar aqui como criar relacionamentos <em>One to One</em>. Para esse exemplo, vamos considerar que um usuário possui um perfil e um perfil só pode pertencer a um usuário.</p>
<p>Para começar, vamos criar nosso usuário.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rails g scaffold user name:string email:string</pre></div></div>

<p>No nosso caso, não iremos precisar criar controller e views para o perfil. As informações contidas no perfil serão criadas no mesmo form que se cria as informações do usuário. Por isso, criaremos apenas um model para o perfil.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rails g model profile user_id:integer description:text</pre></div></div>

<p>Neste caso, faremos o relacionamento adicionando o id do usuário na tabela do perfil. Vamos, agora, adicionar as migrações no banco.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rake db:migrate</pre></div></div>

<p>Podemos começar a adicionar o código para criar nosso relacionamento. A primera coisa a se fazer é alterar os models para que eles saibam com quem estão se relacionando. No model do perfil, vamos dizer que ele pertence ao usuário.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#app/models/profile.rb</span>
<span style="color:#9966CC; font-weight:bold;">class</span> Profile <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
  belongs_to <span style="color:#ff3333; font-weight:bold;">:user</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>O model do usuário vai ficar assim:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#app/models/user.rb</span>
<span style="color:#9966CC; font-weight:bold;">class</span> User <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
  has_one <span style="color:#ff3333; font-weight:bold;">:profile</span>
  accepts_nested_attributes_for <span style="color:#ff3333; font-weight:bold;">:profile</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Neste caso, precisamos adicionar a linha <em>accepts</em>nested<em>attributes</em>for :profile_. O que ela faz é informar para o model que ele deve aceitar os atributos que são do perfil e salvá-los na tabela correspondente. Nested Attributes permitem que você salve os atributos de um filho através de seu pai. Exatamente o que estamos fazendo neste caso. No form de usuário, adicionaremos os campos do perfil e, no momento que submetermos, o perfil será salvo através do usuário. Ficará mais fácil de entender vendo como montaremos o form do usuário. Vamos a ele então.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">#app/views/users/_form.html.erb
<span style="color:#006600; font-weight:bold;">&lt;%</span>= form_for<span style="color:#006600; font-weight:bold;">&#40;</span>@user<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>f<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
  ...
    &lt;div class=&quot;field&quot;&gt;
        <span style="color:#006600; font-weight:bold;">&lt;%</span>= f.<span style="color:#9900CC;">fields_for</span> <span style="color:#ff3333; font-weight:bold;">:profile</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>p<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
            <span style="color:#006600; font-weight:bold;">&lt;%</span>= <span style="color:#CC0066; font-weight:bold;">p</span>.<span style="color:#9900CC;">label</span> <span style="color:#ff3333; font-weight:bold;">:description</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>&lt;br/&gt;
            <span style="color:#006600; font-weight:bold;">&lt;%</span>= <span style="color:#CC0066; font-weight:bold;">p</span>.<span style="color:#9900CC;">text_area</span> <span style="color:#ff3333; font-weight:bold;">:description</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
        <span style="color:#006600; font-weight:bold;">&lt;%</span> <span style="color:#9966CC; font-weight:bold;">end</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
    &lt;/div&gt;
  ...
<span style="color:#006600; font-weight:bold;">&lt;%</span> <span style="color:#9966CC; font-weight:bold;">end</span> <span style="color:#006600; font-weight:bold;">%&gt;</span></pre></div></div>

<p>Eu reduzi um pouco o arquivo para ficar mais fácil de visualizar o código que estamos adicionando. O <em>f.fields</em>for :profile_ serve para adicionarmos os campos do perfil dentro do form do usuário. Foi por isso que adicionamos a linha do nested<em>attributes no model de usuário. Na segunda parte, passamos um bloco onde adicionaremos os campos do perfil que, no nosso caso, é apenas _description</em>.</p>
<p>Precisamos fazer com que a descrição apareça na tela depois de criada. Por isso, a adicionaremos no show do usuário.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">#app/views/users/show.html.erb
...
&lt;p&gt;
  &lt;b&gt;Description:&lt;/b&gt;
  <span style="color:#006600; font-weight:bold;">&lt;%</span>= <span style="color:#0066ff; font-weight:bold;">@user</span>.<span style="color:#9900CC;">profile</span>.<span style="color:#9900CC;">description</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
&lt;/p&gt;</pre></div></div>

<p>Neste momento, se você iniciar o servidor e for olhar sua view, notará que o campo description ainda não está aparecendo; isto é porque ele ainda não foi “criado”. Então, precisamos fazer essa “criação”. Vamos alterar nosso controller para isso.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#app/controllers/users_controller.rb</span>
<span style="color:#9966CC; font-weight:bold;">def</span> new
  <span style="color:#0066ff; font-weight:bold;">@user</span> = User.<span style="color:#9900CC;">new</span>
  <span style="color:#0066ff; font-weight:bold;">@user</span>.<span style="color:#9900CC;">build_profile</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>A linha <em>@user.build</em>profile_ está dizendo para “construir”(não consigo pensar uma expressão melhor no momento <img src='http://ustrajunior.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ) um perfil para esse usuário.</p>
<p>Tudo pronto! Agora, quando você for criar um usuário novo, verá o campo <em>description</em>, que salvará as informações no local certo e com o relacionamento certo.</p>
<p>Apenas como informação adicional: remova o arquivo <em>public/index.html</em> e adicione no config/routes.rb a linha</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">root <span style="color:#ff3333; font-weight:bold;">:to</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'users#index'</span></pre></div></div>

<p>Isso é apenas para vocês não precisarem acessar /users todas a vezes que entrarem no sistema.</p>
<p>Você pode baixar o código fonte do exemplo no repositório <a href="https://github.com/ustrajunior/blog-posts">blog-posts</a>, no Github.</p>
]]></content:encoded>
			<wfw:commentRss>http://ustrajunior.com/2011/11/07/criando-relacionamentos-one-to-one-no-rails-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upload de múltiplas fotos com Paperclip + Uploadify</title>
		<link>http://ustrajunior.com/2011/10/30/upload-de-multiplas-fotos-com-paperclip-uploadify/</link>
		<comments>http://ustrajunior.com/2011/10/30/upload-de-multiplas-fotos-com-paperclip-uploadify/#comments</comments>
		<pubDate>Sun, 30 Oct 2011 23:24:01 +0000</pubDate>
		<dc:creator>José Carlos Ustra Júnior</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[paperclip]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[uploadify]]></category>

		<guid isPermaLink="false">http://ustrajunior.com/?p=156</guid>
		<description><![CDATA[Eu já fiz um post sobre como fazer upload de fotos usando Paperclip. Agora, vou mostrar como fazer vários uploads de uma vez só usando Paperclip + Uploadify. Para esse exemplo, vamos considerar que um álbum possui várias fotos. Comece adicionando a gem do Paperclip. #Gemfile gem 'paperclip' Rode o bundle install para instalar a [...]]]></description>
			<content:encoded><![CDATA[<p>Eu já fiz um <a href="http://ustrajunior.com/2011/10/13/upload-de-fotos-com-paperclip/">post</a> sobre como fazer upload de fotos usando <a href="https://github.com/thoughtbot/paperclip">Paperclip</a>. Agora, vou mostrar como fazer vários uploads de uma vez só usando Paperclip + <a href="http://uploadify.com/">Uploadify</a>.</p>
<p>Para esse exemplo, vamos considerar que um álbum possui várias fotos.</p>
<p>Comece adicionando a gem do Paperclip.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#Gemfile</span>
gem <span style="color: #ff0000;">'paperclip'</span></pre></div></div>

<p>Rode o <em>bundle install</em> para instalar a gem.</p>
<p>Gem adicionada, vamos criar nosso album.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rails g scaffold album name:string</pre></div></div>

<p>Agora, vamos fazer um scaffold para as fotos.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rails g scaffold photo album_id:integer</pre></div></div>

<p>Para facilitar, iremos apenas adicionar o album_id e, para adicionar os outros campos necessários para o paperclip, vamos usar o gerador que ele disponibiliza.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rails generate paperclip Photo image</pre></div></div>

<p>Usaremos o rake db:migrate para atualizar o banco:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rake db:migrate</pre></div></div>

<p>Precisamos, agora, alterar nossos models para criar os relacionamentos e adicionar o helper do paperclip.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#app/models/album.rb</span>
<span style="color:#9966CC; font-weight:bold;">class</span> Album <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
  has_many <span style="color:#ff3333; font-weight:bold;">:photos</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#app/models/photo.rb</span>
<span style="color:#9966CC; font-weight:bold;">class</span> Photo <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
  belongs_to <span style="color:#ff3333; font-weight:bold;">:album</span>
  has_attached_file <span style="color:#ff3333; font-weight:bold;">:image</span>,
                      <span style="color:#ff3333; font-weight:bold;">:styles</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:medium</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;300x300&gt;&quot;</span>,
                                   <span style="color:#ff3333; font-weight:bold;">:thumb</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;100x100&gt;&quot;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Até aqui, nada diferente do que já estamos acostumados. Agora, vem a parte dos múltiplos uploads. Para começar, adicionaremos o form que irá adicionar as fotos.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">#app/views/albums/show.html.erb
<span style="color:#006600; font-weight:bold;">&lt;%</span>= form_for<span style="color:#006600; font-weight:bold;">&#40;</span>Photo.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:album_id</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0066ff; font-weight:bold;">@album</span>.<span style="color:#9900CC;">id</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>f<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
    <span style="color:#006600; font-weight:bold;">&lt;%</span>= f.<span style="color:#9900CC;">hidden_field</span> <span style="color:#ff3333; font-weight:bold;">:album_id</span>, <span style="color:#996600;">&quot;value&quot;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0066ff; font-weight:bold;">@album</span>.<span style="color:#9900CC;">id</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
    &lt;p&gt;<span style="color:#006600; font-weight:bold;">&lt;%</span>= f.<span style="color:#9900CC;">file_field</span> <span style="color:#ff3333; font-weight:bold;">:image</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>&lt;/p&gt;
<span style="color:#006600; font-weight:bold;">&lt;%</span> <span style="color:#9966CC; font-weight:bold;">end</span> <span style="color:#006600; font-weight:bold;">%&gt;</span></pre></div></div>

<p>Agora, temos o nosso formulário, mas ele não faz nada por enquanto; ainda não tem nenhum botão para enviar. Para que o Uploadify funcione, precisamos, ainda, adicionar algumas coisas. Primeiro, vamos alterar o application.html.erb.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">#app/views/layouts/application.html.erb
&lt;head&gt;
    <span style="color:#006600; font-weight:bold;">&lt;%</span>= <span style="color:#9966CC; font-weight:bold;">yield</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:head</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
&lt;/head&gt;</pre></div></div>

<p>Estamos adicionando esse yield(:head) porque só adicionaremos o javascript do uploadify no arquivo que irá utilizá-lo. Vamos a esse arquivo, então. Editaremos, novamente, o <em>show</em> do usuário e adicionaremos o seguinte código no inicio do arquivo.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">#app/views/albums/show.html.erb
<span style="color:#006600; font-weight:bold;">&lt;%</span> content_for<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:head</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
    <span style="color:#006600; font-weight:bold;">&lt;%</span>= render <span style="color:#ff3333; font-weight:bold;">:partial</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;upload&quot;</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
<span style="color:#006600; font-weight:bold;">&lt;%</span> <span style="color:#9966CC; font-weight:bold;">end</span> <span style="color:#006600; font-weight:bold;">%&gt;</span></pre></div></div>

<p>Como vocês podem ver, estamos adicionando um partial upload; ele conterá o código javascript do Uploadify.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">#app<span style="color: #339933;">/</span>views<span style="color: #339933;">/</span>albums<span style="color: #339933;">/</span>_upload.<span style="color: #660066;">html</span>.<span style="color: #660066;">erb</span>
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span> charset<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;utf-8&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;%-</span> session_key <span style="color: #339933;">=</span> Rails.<span style="color: #660066;">application</span>.<span style="color: #660066;">config</span>.<span style="color: #660066;">session_options</span><span style="color: #009900;">&#91;</span><span style="color: #339933;">:</span>key<span style="color: #009900;">&#93;</span> <span style="color: #339933;">-%&gt;</span>
$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#photo_image'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        event.<span style="color: #660066;">preventDefault</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#photo_image'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">uploadify</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
        uploader <span style="color: #339933;">:</span> <span style="color: #3366CC;">'/assets/uploadify.swf'</span><span style="color: #339933;">,</span>
        cancelImg <span style="color: #339933;">:</span> <span style="color: #3366CC;">'/assets/cancel.png'</span><span style="color: #339933;">,</span>
        multi <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
        auto <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
        script <span style="color: #339933;">:</span> <span style="color: #3366CC;">'/photos'</span><span style="color: #339933;">,</span>
        scriptData <span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #3366CC;">'_http_accept'</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'application/javascript'</span><span style="color: #339933;">,</span>
            <span style="color: #3366CC;">'format'</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">'json'</span><span style="color: #339933;">,</span>
            <span style="color: #3366CC;">'_method'</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'post'</span><span style="color: #339933;">,</span>
            <span style="color: #3366CC;">'album_id'</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">'&lt;%= @album.id %&gt;'</span><span style="color: #339933;">,</span>
            <span style="color: #3366CC;">'&lt;%= session_key %&gt;'</span> <span style="color: #339933;">:</span> encodeURIComponent<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;%= u cookies[session_key] %&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
            <span style="color: #3366CC;">'authenticity_token'</span><span style="color: #339933;">:</span> encodeURIComponent<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;%= u form_authenticity_token %&gt;'</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        onComplete <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>event<span style="color: #339933;">,</span> queueID<span style="color: #339933;">,</span> fileObj<span style="color: #339933;">,</span> response<span style="color: #339933;">,</span> data<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.thumbs'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">fadeOut</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'slow'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">load</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'/albums/&lt;%= @album.id %&gt; .thumbs'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">fadeIn</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;slow&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<p>O Uploadify utiliza um arquivo flash para funcionar e, para que sua aplicação funcione direito com isso, precisamos adicionar um token de autenticidade para o flash; são essas 3 linhas:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&lt;%-</span> session_key = Rails.<span style="color:#9900CC;">application</span>.<span style="color:#9900CC;">config</span>.<span style="color:#9900CC;">session_options</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:key</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">-%&gt;</span>
'<span style="color:#006600; font-weight:bold;">&lt;%</span>= session_key <span style="color:#006600; font-weight:bold;">%&gt;</span>' : encodeURIComponent('<span style="color:#006600; font-weight:bold;">&lt;%</span>= u cookies<span style="color:#006600; font-weight:bold;">&#91;</span>session_key<span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>'),
'authenticity_token': encodeURIComponent('<span style="color:#006600; font-weight:bold;">&lt;%</span>= u form_authenticity_token <span style="color:#006600; font-weight:bold;">%&gt;</span>')</pre></div></div>

<p>Vamos, também, adicionar um novo arquivo com o seguinte conteúdo:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#app/middleware/flash_session_cookie_middleware.rb</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rack/utils'</span>
<span style="color:#9966CC; font-weight:bold;">class</span> FlashSessionCookieMiddleware
  <span style="color:#9966CC; font-weight:bold;">def</span> initialize<span style="color:#006600; font-weight:bold;">&#40;</span>app, session_key = <span style="color:#996600;">'_session_id'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#0066ff; font-weight:bold;">@app</span> = app
    <span style="color:#0066ff; font-weight:bold;">@session_key</span> = session_key
  <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> call<span style="color:#006600; font-weight:bold;">&#40;</span>env<span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">if</span> env<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'HTTP_USER_AGENT'</span><span style="color:#006600; font-weight:bold;">&#93;</span> =~ <span style="color:#006600; font-weight:bold;">/</span>^<span style="color:#006600; font-weight:bold;">&#40;</span>Adobe<span style="color:#006600; font-weight:bold;">|</span>Shockwave<span style="color:#006600; font-weight:bold;">&#41;</span> Flash<span style="color:#006600; font-weight:bold;">/</span>
      req = <span style="color:#6666ff; font-weight:bold;">Rack::Request</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>env<span style="color:#006600; font-weight:bold;">&#41;</span>
      env<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'HTTP_COOKIE'</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#006600; font-weight:bold;">&#91;</span> <span style="color:#0066ff; font-weight:bold;">@session_key</span>,
                             req.<span style="color:#9900CC;">params</span><span style="color:#006600; font-weight:bold;">&#91;</span>@session_key<span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'='</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">freeze</span> <span style="color:#9966CC; font-weight:bold;">unless</span> req.<span style="color:#9900CC;">params</span><span style="color:#006600; font-weight:bold;">&#91;</span>@session_key<span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#0000FF; font-weight:bold;">nil</span>?
      env<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'HTTP_ACCEPT'</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#996600;">&quot;#{req.params['_http_accept']}&quot;</span>.<span style="color:#9900CC;">freeze</span> <span style="color:#9966CC; font-weight:bold;">unless</span> req.<span style="color:#9900CC;">params</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'_http_accept'</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#0000FF; font-weight:bold;">nil</span>?
    <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#0066ff; font-weight:bold;">@app</span>.<span style="color:#9900CC;">call</span><span style="color:#006600; font-weight:bold;">&#40;</span>env<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Agora, faremos com que o rails adicione isso na nossa sessão. Adicione o código abaixo no arquivo <em>session_</em>store.rb</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#config/initializers/session_store.rb</span>
...
<span style="color:#9900CC;">Rails</span>.<span style="color:#9900CC;">application</span>.<span style="color:#9900CC;">config</span>.<span style="color:#9900CC;">middleware</span>.<span style="color:#9900CC;">insert_before</span><span style="color:#006600; font-weight:bold;">&#40;</span>
  <span style="color:#6666ff; font-weight:bold;">ActionDispatch::Session::CookieStore</span>,
  FlashSessionCookieMiddleware,
  Rails.<span style="color:#9900CC;">application</span>.<span style="color:#9900CC;">config</span>.<span style="color:#9900CC;">session_options</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:key</span><span style="color:#006600; font-weight:bold;">&#93;</span>
<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>A parte do Uploadify nas views está pronta. O próximo passo é adicionar as imagens na tela. Para isso, editaremos o arquivo show, novamente.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">#app/views/albums/show.html.erb
&lt;div class=&quot;thumbs&quot;&gt;
    <span style="color:#006600; font-weight:bold;">&lt;%</span> <span style="color:#0066ff; font-weight:bold;">@album</span>.<span style="color:#9900CC;">photos</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>photo<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
        &lt;p&gt;<span style="color:#006600; font-weight:bold;">&lt;%</span>= image_tag photo.<span style="color:#9900CC;">image</span>.<span style="color:#9900CC;">url</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:medium</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>&lt;/p&gt;
    <span style="color:#006600; font-weight:bold;">&lt;%</span> <span style="color:#9966CC; font-weight:bold;">end</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
&lt;/div&gt;</pre></div></div>

<p>Com os Models e views prontos, precisamos adicionar códigos no controller, também, e alterar o método create para receber os novos parâmetros enviados pelo form do Uploadify.</p>
<p>Primeiro, criaremos um método privado com o seguinte código:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#app/controllers/photos_controller.rb</span>
private
<span style="color:#9966CC; font-weight:bold;">def</span> coerce<span style="color:#006600; font-weight:bold;">&#40;</span>params<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">if</span> params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:photo</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#0000FF; font-weight:bold;">nil</span>?
    h = <span style="color:#CC00FF; font-weight:bold;">Hash</span>.<span style="color:#9900CC;">new</span>
    h<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:photo</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#CC00FF; font-weight:bold;">Hash</span>.<span style="color:#9900CC;">new</span>
    h<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:photo</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:album_id</span><span style="color:#006600; font-weight:bold;">&#93;</span> = params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:album_id</span><span style="color:#006600; font-weight:bold;">&#93;</span>
    h<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:photo</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:image</span><span style="color:#006600; font-weight:bold;">&#93;</span> = params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:Filedata</span><span style="color:#006600; font-weight:bold;">&#93;</span>
    h<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:photo</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:image</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">content_type</span> = <span style="color:#6666ff; font-weight:bold;">MIME::Types</span>.<span style="color:#9900CC;">type_for</span><span style="color:#006600; font-weight:bold;">&#40;</span>h<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:photo</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:image</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">original_filename</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">to_s</span>
    h
  <span style="color:#9966CC; font-weight:bold;">else</span>
    params
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Ele vai tratar os parâmetos enviados e fazer com que fiquem em um formato que podemos usar para salvar nosso objeto. Também precisamos alterar o método create dessa forma:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#app/controllers/photos_controller.rb</span>
<span style="color:#9966CC; font-weight:bold;">def</span> create 
  <span style="color:#0066ff; font-weight:bold;">@album</span> = Album.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span>params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:album_id</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  newparams = coerce<span style="color:#006600; font-weight:bold;">&#40;</span>params<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#0066ff; font-weight:bold;">@photo</span> = Photo.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>newparams<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:photo</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
  respond_to <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>format<span style="color:#006600; font-weight:bold;">|</span>
    <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#0066ff; font-weight:bold;">@photo</span>.<span style="color:#9900CC;">save</span>
      <span style="color:#CC0066; font-weight:bold;">format</span>.<span style="color:#9900CC;">html</span> <span style="color:#006600; font-weight:bold;">&#123;</span> redirect_to album_path<span style="color:#006600; font-weight:bold;">&#40;</span>@album<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
      <span style="color:#CC0066; font-weight:bold;">format</span>.<span style="color:#9900CC;">json</span> <span style="color:#006600; font-weight:bold;">&#123;</span> render <span style="color:#ff3333; font-weight:bold;">:json</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:result</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> ‘success’, <span style="color:#ff3333; font-weight:bold;">:upload</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> photo_path<span style="color:#006600; font-weight:bold;">&#40;</span>@photo<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
    <span style="color:#9966CC; font-weight:bold;">else</span>
      <span style="color:#CC0066; font-weight:bold;">format</span>.<span style="color:#9900CC;">html</span> <span style="color:#006600; font-weight:bold;">&#123;</span> render <span style="color:#ff3333; font-weight:bold;">:action</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> “new” <span style="color:#006600; font-weight:bold;">&#125;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Para finalizar, adicionaremos os arquivos do Uploadify na nossa aplicação. Ficará da seguinte forma:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#app/assets/javascripts</span>
jquery.<span style="color:#9900CC;">uploadify</span>.<span style="color:#9900CC;">v2</span>.1.4.<span style="color:#9900CC;">min</span>.<span style="color:#9900CC;">js</span>
swfobject.<span style="color:#9900CC;">js</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#app/assets/stylesheets</span>
uploadify.<span style="color:#9900CC;">css</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#app/assets/swf</span>
uploadify.<span style="color:#9900CC;">swf</span></pre></div></div>

<p>Todos esses arquivos do Uploadify você encontra no zip, disponibilizado no site do plugin. Para baixar direto, <a href="http://www.uploadify.com/wp-content/uploads/uploadify-v2.1.4.zip">clique aqui</a>.</p>
<p>Acesse http://localhost:3000/albums e crie um álbum e, depois disso, teste o upload das fotos.</p>
<p>Você pode baixar o código fonte do exemplo no repositório <a href="https://github.com/ustrajunior/blog-posts">blog-posts</a>, no Github.</p>
]]></content:encoded>
			<wfw:commentRss>http://ustrajunior.com/2011/10/30/upload-de-multiplas-fotos-com-paperclip-uploadify/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Notícias #1</title>
		<link>http://ustrajunior.com/2011/10/29/noticias-1/</link>
		<comments>http://ustrajunior.com/2011/10/29/noticias-1/#comments</comments>
		<pubDate>Sun, 30 Oct 2011 00:55:54 +0000</pubDate>
		<dc:creator>José Carlos Ustra Júnior</dc:creator>
				<category><![CDATA[Notícias]]></category>
		<category><![CDATA[notícias]]></category>
		<category><![CDATA[paperclip]]></category>
		<category><![CDATA[uploadify]]></category>

		<guid isPermaLink="false">http://ustrajunior.com/?p=138</guid>
		<description><![CDATA[Próximo post. Estou preparando um post sobre upload de fotos com Paperclip e Uploadify. Estou organizando para que fique bem explicado. Como é um post maior, não quero que fique confuso. Aplicações no Github A partir do próximo post, todos os tutoriais serão disponibilizados com uma aplicação no Github. Acho que dessa forma fica legal [...]]]></description>
			<content:encoded><![CDATA[<h3>Próximo post.</h3>
<p>Estou preparando um post sobre upload de fotos com Paperclip e Uploadify. Estou organizando para que fique bem explicado. Como é um post maior, não quero que fique confuso.</p>
<h3>Aplicações no Github</h3>
<p>A partir do próximo post, todos os tutoriais serão disponibilizados com uma aplicação no Github. Acho que dessa forma fica legal para quem quiser baixar o código e estudar melhor. Por enquanto, ainda são aplicações pequenas. Mas pretendo, com o tempo, passar a criar aplicações mais complexas; acho que disponibilizando o código, ajuda bastante para quem está aprendendo.</p>
]]></content:encoded>
			<wfw:commentRss>http://ustrajunior.com/2011/10/29/noticias-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pow, um novo servidor Rack para Mac OS X</title>
		<link>http://ustrajunior.com/2011/10/20/pow-um-novo-servidor-rack-para-mac-os-x/</link>
		<comments>http://ustrajunior.com/2011/10/20/pow-um-novo-servidor-rack-para-mac-os-x/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 23:41:12 +0000</pubDate>
		<dc:creator>José Carlos Ustra Júnior</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[pow]]></category>
		<category><![CDATA[rack]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://ustrajunior.com/?p=143</guid>
		<description><![CDATA[Pow foi criado pela 37signals e é um servidor Rack que não necessita de configuração. Não é necessário instalar gems ou compilar extensões do apache. O Pow pode ser instalado e atualizado apenas rodando um comando no Terminal. Ele também tem integração com o rvm então, suas aplicações podem utilizar diferentes versões do ruby/rails e mesmo assim ele [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Pow" href="http://pow.cx/">Pow</a> foi criado pela <a title="37signals" href="http://37signals.com/">37signals</a> e é um servidor Rack que não necessita de configuração. Não é necessário instalar gems ou compilar extensões do apache. O Pow pode ser instalado e atualizado apenas rodando um comando no Terminal. Ele também tem integração com o <a title="rvm" href="http://rvm.beginrescueend.com/">rvm</a> então, suas aplicações podem utilizar diferentes versões do ruby/rails e mesmo assim ele irá funcionar sem problemas.</p>
<p>Para instalar o Pow, basta ir no Terminal.app e rodar o comando:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">curl get.pow.cx <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sh</span></pre></div></div>

<p>Com isso, você faz a instalação e já pode começar a usar. Para fazer o &#8220;deploy&#8221;, basta criar um link simbólico dentro da pasta <em><strong><span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">~/.pow</span></strong></em><span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">.</span></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>.pow
<span style="color: #c20cb9; font-weight: bold;">ln</span> <span style="color: #660033;">-s</span> <span style="color: #000000; font-weight: bold;">/</span>path<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span>myapp</pre></div></div>

<p>Esse link simbólico é a unica coisa necessária para ativar o server. Agora acesse <em><strong>http://myapp.dev </strong></em>e sua aplicação estará rodando normalmente.</p>
<p>Se você quiser tornar o processo ainda mais fácil, basta utilizar a gem <em><strong><a title="Powder" href="https://github.com/Rodreegez/powder">powder</a></strong></em>.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">gem <span style="color: #c20cb9; font-weight: bold;">install</span> powder</pre></div></div>

<p>Agora, no terminal entre na pasta da sua aplicação e faça:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>myapp
powder <span style="color: #c20cb9; font-weight: bold;">link</span></pre></div></div>

<p>Para saber mais sobre o Pow acesse o site: <em><strong><a title="Pow" href="http://pow.cx/">http://pow.cx/</a>.</strong></em></p>
<p>Uma das coisas que eu achei legal, é que agora sempre que quero mostrar alguma aplicação para alguém basta acessar a url sem precisar ir no terminal rodar o server manualmente <img src='http://ustrajunior.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://ustrajunior.com/2011/10/20/pow-um-novo-servidor-rack-para-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Upload de fotos com Paperclip</title>
		<link>http://ustrajunior.com/2011/10/13/upload-de-fotos-com-paperclip/</link>
		<comments>http://ustrajunior.com/2011/10/13/upload-de-fotos-com-paperclip/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 18:10:18 +0000</pubDate>
		<dc:creator>José Carlos Ustra Júnior</dc:creator>
				<category><![CDATA[Gems]]></category>
		<category><![CDATA[fotos]]></category>
		<category><![CDATA[paperclip]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[upload]]></category>

		<guid isPermaLink="false">http://ustrajunior.com/?p=122</guid>
		<description><![CDATA[Eu estou trabalhando em uma aplicação que mexe muito com fotografias. Uma das principais funções da aplicação é fazer o upload das fotos. Eu estou desenvolvendo usando Rails 3.1 e o upload é feito com a gem Paperclip. Para começar a usar a gem, você precisa ter instalado o ImageMagick. Utilizando o Homebrew, a instalação é [...]]]></description>
			<content:encoded><![CDATA[<p>Eu estou trabalhando em uma aplicação que mexe muito com fotografias. Uma das principais funções da aplicação é fazer o upload das fotos. Eu estou desenvolvendo usando Rails 3.1 e o upload é feito com a gem <a title="Paperclip" href="https://github.com/thoughtbot/paperclip">Paperclip</a>.</p>
<p>Para começar a usar a gem, você precisa ter instalado o <strong>ImageMagick.</strong> Utilizando o <a title="Homebrew" href="http://mxcl.github.com/homebrew/">Homebrew</a>, a instalação é bem simples:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">brew <span style="color: #c20cb9; font-weight: bold;">install</span> imagemagick</pre></div></div>

<p>Agora vamos configurar a gem no nosso sistema. Adicione  no seu Gemfile o código:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#Gemfile</span>
gem <span style="color: #ff0000;">&quot;paperclip&quot;</span></pre></div></div>

<p>Rode o <strong>bundle install</strong> para instalar a gem.<br />
Nesse caso, iremos adicionar um avatar a um model user já existente. Vamos usar um gerador que o Paperclip disponibiliza.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rails generate paperclip User avatar</pre></div></div>

<p>Ele irá gerar a seguinte migração:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#db/migrate/20111013174306_add_attachment_avatar_to_user.rb</span>
<span style="color:#9966CC; font-weight:bold;">class</span> AddAttachmentAvatarToUser <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Migration</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">up</span>
    add_column <span style="color:#ff3333; font-weight:bold;">:users</span>, <span style="color:#ff3333; font-weight:bold;">:avatar_file_name</span>, :<span style="color:#CC0066; font-weight:bold;">string</span>
    add_column <span style="color:#ff3333; font-weight:bold;">:users</span>, <span style="color:#ff3333; font-weight:bold;">:avatar_content_type</span>, :<span style="color:#CC0066; font-weight:bold;">string</span>
    add_column <span style="color:#ff3333; font-weight:bold;">:users</span>, <span style="color:#ff3333; font-weight:bold;">:avatar_file_size</span>, :<span style="color:#CC0066; font-weight:bold;">integer</span>
    add_column <span style="color:#ff3333; font-weight:bold;">:users</span>, <span style="color:#ff3333; font-weight:bold;">:avatar_updated_at</span>, <span style="color:#ff3333; font-weight:bold;">:datetime</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">down</span>
    remove_column <span style="color:#ff3333; font-weight:bold;">:users</span>, <span style="color:#ff3333; font-weight:bold;">:avatar_file_name</span>
    remove_column <span style="color:#ff3333; font-weight:bold;">:users</span>, <span style="color:#ff3333; font-weight:bold;">:avatar_content_type</span>
    remove_column <span style="color:#ff3333; font-weight:bold;">:users</span>, <span style="color:#ff3333; font-weight:bold;">:avatar_file_size</span>
    remove_column <span style="color:#ff3333; font-weight:bold;">:users</span>, <span style="color:#ff3333; font-weight:bold;">:avatar_updated_at</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Rode o <strong>rake db:migrate</strong> para atualizar o banco e vamos prepara agora nosso model. No model User vamos adicionar os comandos necessários para fazer o upload.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#app/models/user.rb</span>
has_attached_file <span style="color:#ff3333; font-weight:bold;">:avatar</span>,
                    <span style="color:#ff3333; font-weight:bold;">:styles</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:medium</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;300x300&gt;&quot;</span>,
                                 <span style="color:#ff3333; font-weight:bold;">:thumb</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;100x100&gt;&quot;</span> <span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>E agora no seu _form.html.erb do usuário, vamos adicionar o campo para selecionar o arquivo.</p>

<div class="wp_syntax"><div class="code"><pre class="rails" style="font-family:monospace;">#app/views/users/_form.html.erb
<span style="color:#006600; font-weight:bold;">&lt;%</span>= <span style="color:#5A0A0A; font-weight:bold;">form_for</span><span style="color:#006600; font-weight:bold;">&#40;</span>@user<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>f<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
  #o resto do seu código
  <span style="color:#006600; font-weight:bold;">&lt;%</span>= f.<span style="color:#5A0A0A; font-weight:bold;">file_field</span> <span style="color:#ff3333; font-weight:bold;">:avatar</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
  #o resto do seu código
<span style="color:#006600; font-weight:bold;">&lt;%</span> <span style="color:#9966CC; font-weight:bold;">end</span> <span style="color:#006600; font-weight:bold;">%&gt;</span></pre></div></div>

<p>No Rails 3.1 você não precisa mais adicionar o <strong>:html =&gt; { :multipart =&gt; true } </strong>ao seu form, mas caso esteja usando uma versão menor, seu form deverá ficar assim:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&lt;%</span> form_for <span style="color:#ff3333; font-weight:bold;">:user</span>, <span style="color:#ff3333; font-weight:bold;">:html</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:multipart</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span> <span style="color:#006600; font-weight:bold;">&#125;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>form<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">%&gt;</span></pre></div></div>

<p>O resto permanece o mesmo. Para vermos o resultado, no show vamos adicionar o seguinte código:</p>

<div class="wp_syntax"><div class="code"><pre class="rails" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&lt;%</span>= <span style="color:#5A0A0A; font-weight:bold;">image_tag</span> <span style="color:#0066ff; font-weight:bold;">@user</span>.<span style="color:#9900CC;">avatar</span>.<span style="color:#9900CC;">url</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
<span style="color:#006600; font-weight:bold;">&lt;%</span>= <span style="color:#5A0A0A; font-weight:bold;">image_tag</span> <span style="color:#0066ff; font-weight:bold;">@user</span>.<span style="color:#9900CC;">avatar</span>.<span style="color:#9900CC;">url</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:medium</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
<span style="color:#006600; font-weight:bold;">&lt;%</span>= <span style="color:#5A0A0A; font-weight:bold;">image_tag</span> <span style="color:#0066ff; font-weight:bold;">@user</span>.<span style="color:#9900CC;">avatar</span>.<span style="color:#9900CC;">url</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:thumb</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">%&gt;</span></pre></div></div>

<p>Agora, você tem um upload de fotos funcionando na sua aplicação. Em um outro post irei mostrar como fazer upload de múltiplas fotos usando o <a title="Uploadify" href="http://www.uploadify.com/">Uploadify</a>, que é um plugin para Jquery muito legal.</p>
]]></content:encoded>
			<wfw:commentRss>http://ustrajunior.com/2011/10/13/upload-de-fotos-com-paperclip/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Aos 56, morre Steve Jobs.</title>
		<link>http://ustrajunior.com/2011/10/05/aos-56-morre-steve-jobs/</link>
		<comments>http://ustrajunior.com/2011/10/05/aos-56-morre-steve-jobs/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 02:46:15 +0000</pubDate>
		<dc:creator>José Carlos Ustra Júnior</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[1955]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[Steve Jobs]]></category>

		<guid isPermaLink="false">http://ustrajunior.com/?p=106</guid>
		<description><![CDATA[Hoje, faleceu Steve Jobs. Uma das mentes mais brilhantes da nossa época e que irá deixar saudades a todos que admiravam seu trabalho. Criador do iPod, iTunes, iPhone, iPad e Mac, foi com certeza uma das pessoas mais inovadoras que o mundo já conheceu. Torço para que todo seu legado continue a crescer da mesma [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje, faleceu Steve Jobs. Uma das mentes mais brilhantes da nossa época e que irá deixar saudades a todos que admiravam seu trabalho.</p>
<p>Criador do iPod, iTunes, iPhone, iPad e Mac, foi com certeza uma das pessoas mais inovadoras que o mundo já conheceu. Torço para que todo seu legado continue a crescer da mesma forma que cresceu enquanto ele estava a frente da Apple.</p>
<p><a href="http://www.apple.com/stevejobs/"><img class="aligncenter size-full wp-image-115" title="steve_msg" src="http://ustrajunior.com/wp-content/uploads/2011/10/steve_msg.png" alt="Steve Jobs 1955-2011" width="840" height="197" /></a></p>
<p>Esse é o vídeo de uma famoso discurso na Universidade de Stanford. Vale a pena conferir e aprender um pouco com ele.</p>
<p><iframe src="http://www.youtube.com/embed/66f2yP7ehDs" frameborder="0" width="918" height="652"></iframe></p>
<h2><strong>&#8220;Stay Hungry Stay Foolish&#8221;</strong></h2>
]]></content:encoded>
			<wfw:commentRss>http://ustrajunior.com/2011/10/05/aos-56-morre-steve-jobs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Testando envio de emails no Rails com Letter Opener</title>
		<link>http://ustrajunior.com/2011/09/26/testando-envio-de-emails-no-rails-com-letter-opener/</link>
		<comments>http://ustrajunior.com/2011/09/26/testando-envio-de-emails-no-rails-com-letter-opener/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 22:31:48 +0000</pubDate>
		<dc:creator>José Carlos Ustra Júnior</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[letter_opener]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://ustrajunior.com/?p=90</guid>
		<description><![CDATA[Eu estou desenvolvendo uma aplicação em Rails que precisa enviar emails em algumas ocasiões. Eu queria ver o resultado do meu envio, mas não queria precisar enviar o email para minha conta, queria fazer tudo dentro da aplicação. É ai que entra a gem Letter Opener do Ryan Bates. Antes de conhecer essa gem, eu colocava [...]]]></description>
			<content:encoded><![CDATA[<p>Eu estou desenvolvendo uma aplicação em Rails que precisa enviar emails em algumas ocasiões. Eu queria ver o resultado do meu envio, mas não queria precisar enviar o email para minha conta, queria fazer tudo dentro da aplicação. É ai que entra a gem <a title="Letter Opener" href="https://github.com/ryanb/letter_opener">Letter Opener</a> do <a title="Ryan Bates" href="http://twitter.com/rbates">Ryan Bates</a>.</p>
<p>Antes de conhecer essa gem, eu colocava o código abaixo no <em>development.rb </em>para fazer o envio usando minha conta do gmail.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"> <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'tlsmail'</span> <span style="color:#008000; font-style:italic;">#key but not always described</span>
  <span style="color:#6666ff; font-weight:bold;">Net::SMTP</span>.<span style="color:#9900CC;">enable_tls</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#6666ff; font-weight:bold;">OpenSSL::SSL::VERIFY_NONE</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
  <span style="color:#6666ff; font-weight:bold;">ActionMailer::Base</span>.<span style="color:#9900CC;">delivery_method</span> = <span style="color:#ff3333; font-weight:bold;">:smtp</span>
  <span style="color:#6666ff; font-weight:bold;">ActionMailer::Base</span>.<span style="color:#9900CC;">perform_deliveries</span> = <span style="color:#0000FF; font-weight:bold;">true</span>
  <span style="color:#6666ff; font-weight:bold;">ActionMailer::Base</span>.<span style="color:#9900CC;">raise_delivery_errors</span> = <span style="color:#0000FF; font-weight:bold;">true</span>
&nbsp;
  <span style="color:#6666ff; font-weight:bold;">ActionMailer::Base</span>.<span style="color:#9900CC;">smtp_settings</span> = <span style="color:#006600; font-weight:bold;">&#123;</span>
    <span style="color:#ff3333; font-weight:bold;">:enable_starttls_auto</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>,  <span style="color:#008000; font-style:italic;">#this is the important shit!</span>
    <span style="color:#ff3333; font-weight:bold;">:address</span>        <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'smtp.gmail.com'</span>,
    <span style="color:#ff3333; font-weight:bold;">:port</span>           <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">587</span>,
    <span style="color:#ff3333; font-weight:bold;">:domain</span>         <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'ustraview.com'</span>,
    <span style="color:#ff3333; font-weight:bold;">:authentication</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:plain</span>,
    <span style="color:#ff3333; font-weight:bold;">:user_name</span>      <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'email'</span>,
    <span style="color:#ff3333; font-weight:bold;">:password</span>       <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'password'</span>
  <span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>Então, sempre que uma email era enviado, eu precisava ir na minha caixa de entrada para ver o email enviado.</p>
<p>Agora, com essa gem, ficou tudo muito mais fácil. Primeiro instale a gem</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">gem <span style="color:#996600;">&quot;letter_opener&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:group</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:development</span></pre></div></div>

<p>e no development.rb, simplesmente adicione:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">config.<span style="color:#9900CC;">action_mailer</span>.<span style="color:#9900CC;">delivery_method</span> = <span style="color:#ff3333; font-weight:bold;">:letter_opener</span></pre></div></div>

<p>No momento em que um email é enviado, a gem intercepta esse envio, salva o email em <em>/tmp/letter_opener</em> e abre no browser uma tela nesse estilo:</p>
<p><a href="http://ustrajunior.com/wp-content/uploads/2011/09/email.png" rel="prettyPhoto[90]"><img class="aligncenter size-full wp-image-96" title="email" src="http://ustrajunior.com/wp-content/uploads/2011/09/email.png" alt="" width="608" height="258" /></a>Tudo muito simples.</p>
<pre escaped="true" lang=""></pre>
]]></content:encoded>
			<wfw:commentRss>http://ustrajunior.com/2011/09/26/testando-envio-de-emails-no-rails-com-letter-opener/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Montando ambiente Rails no Lion</title>
		<link>http://ustrajunior.com/2011/09/19/montando-ambiente-rails-no-lion/</link>
		<comments>http://ustrajunior.com/2011/09/19/montando-ambiente-rails-no-lion/#comments</comments>
		<pubDate>Mon, 19 Sep 2011 14:06:02 +0000</pubDate>
		<dc:creator>José Carlos Ustra Júnior</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[homebrew]]></category>
		<category><![CDATA[lion]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[rvm]]></category>

		<guid isPermaLink="false">http://ustrajunior.com/?p=75</guid>
		<description><![CDATA[Comprei um mac novo ontem, que veio com o Lion. Agora preciso montar meu ambiente de desenvolvimento, novamente. As ferramentas que irei instalar são: git, rvm, ruby/rails. A primeira coisa a se fazer antes de iniciar é instalar o xCode. Basta baixar na Mac App Store. Uma ferramenta muito interessante para facilitar a instalação de [...]]]></description>
			<content:encoded><![CDATA[<p>Comprei um mac novo ontem, que veio com o Lion. Agora preciso montar meu ambiente de desenvolvimento, novamente. As ferramentas que irei instalar são: git, rvm, ruby/rails.</p>
<p>A primeira coisa a se fazer antes de iniciar é instalar o <a title="xCode" href="http://itunes.apple.com/br/app/xcode/id448457090?mt=12">xCode</a>. Basta baixar na Mac App Store.</p>
<p>Uma ferramenta muito interessante para facilitar a instalação de sistemas no Mac OS é o <a title="Homebrew" href="http://mxcl.github.com/homebrew/">Homebrew</a>. Para instalar certos programas com ele, basta usar o comando brew install e o nome do programa. Ex: <em>brew install wget.</em></p>
<h2>Instalando o Homebrew</h2>
<p>Essa parte não está ligada diretamente ao ambiente Rails. Mas como irei usá-lo para instalar o git, vou mostrar como instalá-lo também.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">/usr/bin/ruby -e &quot;$(curl -fsSL https://raw.github.com/gist/323731)&quot;
brew update</pre></div></div>

<h2>Instalando o git</h2>
<p>Para mim, bastou rodar o comando brew update, que ele já instalou o git. Caso não tenha instalado para você, instale com o comando:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">brew install git</pre></div></div>

<p>O homebrew irá baixar e compilar os arquivos necessários para instalar o git.</p>
<h2>Instalando RVM</h2>
<p>O RVM é um gerenciador de versões do ruby. Com ele, você pode, ao mesmo tempo, instalar o Ruby 1.8.7 e o Ruby 1.9.2, inclusive paths diferentes. Por exemplo: Ruby 1.8.7-p180 e Ruby 1.9.2-p290. Isso é muito útil para caso você tenha projetos em diferentes versões do Ruby.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">bash &lt; &lt;(curl -s https://rvm.beginrescueend.com/install/rvm)</pre></div></div>

<p>Leia as instruções exibidas no console; você precisará adicionar uma linha no seu .bash_profile.</p>
<h2>Instalando o Ruby 1.9.2-p290</h2>
<p>Para instalar versões do Ruby, é só usar o comando <em>rvm install</em> e dizer qual Ruby você deseja instalar.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">rvm install 1.9.2-p290</pre></div></div>

<p>O comando <em>rvm list</em> mostra todas as versões que você possui e, caso queria mudar de versão, basta usar <em>rvm use 1.9.2-p290.</em></p>
<p>Vamos aproveitar para setar o Ruby que instalamos como default.</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">rvm use 1.9.2-p290 --default</pre></div></div>

<p>Assim, mesmo instalando outras versões, essa acima sempre será a default.</p>
<h2>Instalando Rails 3.1</h2>
<p>Eu já estou usando o Rails 3.1 nos projetos que estou trabalhando. Mas caso você não esteja, basta instalar a versão que você desejar, com ou sem <em>rvm,</em> funciona do mesmo modo.</p>
<p>gem install rails</p>
<p>Agora, o básico para se programar em Rails está instalado. Vamos criar uma aplicação simples para testar.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">rails new first_app
cd first_app
rails s</pre></div></div>

<p>Acesse http://localhost:3000 para ver o server rodando.</p>
]]></content:encoded>
			<wfw:commentRss>http://ustrajunior.com/2011/09/19/montando-ambiente-rails-no-lion/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Gerenciando o database.yml com Capistrano</title>
		<link>http://ustrajunior.com/2011/07/18/gerenciando-o-database-yml-com-capistrano/</link>
		<comments>http://ustrajunior.com/2011/07/18/gerenciando-o-database-yml-com-capistrano/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 15:22:05 +0000</pubDate>
		<dc:creator>José Carlos Ustra Júnior</dc:creator>
				<category><![CDATA[Deploy]]></category>
		<category><![CDATA[capistrano]]></category>
		<category><![CDATA[deploy]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://ustrajunior.com/?p=24</guid>
		<description><![CDATA[Em um outro post eu mostrei como usar o Capistrano para fazer deploy de sua aplicação. Agora vou mostrar como gerenciar seu arquivo database.yml. Em alguns casos, como seu projeto ser open source e estar no github, não é interessante comitar seu arquivo de configuração do banco, afinal de contas lá está a senha do [...]]]></description>
			<content:encoded><![CDATA[<p>Em um <a title="Fazendo deploy com capistrano" href="http://ustrajunior.com/2011/06/30/fazendo-deploy-com-capistrano">outro post</a> eu mostrei como usar o Capistrano para fazer deploy de sua aplicação. Agora vou mostrar como gerenciar seu arquivo database.yml.</p>
<p>Em alguns casos, como seu projeto ser open source e estar no github, não é interessante comitar seu arquivo de configuração do banco, afinal de contas lá está a senha do banco de produção. O ideal é no servidor manter uma cópia do banco de produção, para sempre que fizer o deploy atualizar o database.yml.</p>
<p>Então vamos fazer isso, primeiro adicione o arquivo config/database.yml no seu .gitignore:</p>
<p>No servidor, na posta do projeto existe uma diretório *shared* nele ficam os arquivos que serão compartilhados entre as versões do seu código. Crie, nele, um diretório config:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">mkdir -p shared/config</pre></div></div>

<p>E crie um arquivo database.yml com a configuração do seu banco. Algo assim:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">production: encoding: utf8 
reconnect: <span style="color:#0000FF; font-weight:bold;">true</span> pool: <span style="color:#006666;">10</span>
wait_timeout: <span style="color:#006666;">10</span> username:
user password: password
host: 127.0.0.1
database: database
adapter: mysql</pre></div></div>

<p>No seu arquivo config/deploy.rb vamos colocar o código responsável por adicionar o arquivo do banco a versão atual do projeto:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">after <span style="color:#996600;">'deploy:update_code'</span>, <span style="color:#996600;">'deploy:symlink_db'</span>
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;Symlinks the database.yml&quot;</span> 
  task <span style="color:#ff3333; font-weight:bold;">:symlink_db</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;">:app</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    run <span style="color:#996600;">&quot;ln -nfs #{deploy_to}/shared/config/database.yml 
            #{release_path}/config/database.yml&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Com isso, sempre que você fizer o *cap deploy* ele irá criar um link simbólico do arquivo database.yml do diretório shared apontando para o config/ do seu projeto.</p>
<p>Dessa forma você não precisa se preocupar com as configurações do seu banco.</p>
]]></content:encoded>
			<wfw:commentRss>http://ustrajunior.com/2011/07/18/gerenciando-o-database-yml-com-capistrano/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

