<?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>ArthurGeek.net &#187; deploy</title>
	<atom:link href="http://www.arthurgeek.net/tag/deploy/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.arthurgeek.net</link>
	<description>Rails, Mac... e Rock'n Roll!</description>
	<lastBuildDate>Sat, 20 Dec 2008 23:25:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Deploy Rails com: Apache  + mod_proxy_balancer + mongrel</title>
		<link>http://www.arthurgeek.net/configurando-rails-com-apache-2-2-x-mod_proxy_balancer-mongrel_cluster/</link>
		<comments>http://www.arthurgeek.net/configurando-rails-com-apache-2-2-x-mod_proxy_balancer-mongrel_cluster/#comments</comments>
		<pubDate>Sun, 13 May 2007 19:21:00 +0000</pubDate>
		<dc:creator>ArthurGeek</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[deploy]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mongrel]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.arthurgeek.net/2008/05/24/configurando-rails-com-apache-2-2-x-mod_proxy_balancer-mongrel_cluster</guid>
		<description><![CDATA[
[Update: Hoje em dia, o método preferido para deploy Rails + Apache é usando o Phusion Passenger, também conhecido como mod_rails. Para aprender como fazer um deploy com o mod_rails, leia este excelente artigo do Nando Vieira. :)]
Como eu havia dito, não achei artigos em português explicando como fazer o deploy de aplicações Rails usando [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right;"><script src="http://rec6.via6.com/link.php?action=widget&amp;url=http://www.arthurgeek.net/2007/5/13/configurando-rails-com-apache-2-2-x-mod_proxy_balancer-mongrel_cluster" type="text/javascript"></script></div>
<p>[<strong>Update</strong>: Hoje em dia, o método preferido para deploy Rails + Apache é usando o <a href="http://www.modrails.com">Phusion Passenger</a>, também conhecido como mod_rails. Para aprender como fazer um deploy com o mod_rails, leia <a href="http://simplesideias.com.br/instalando-o-mod_rails-phusion-passenger-no-mac-os-x-leopard/">este excelente artigo</a> do <a href="http://simplesideias.com.br">Nando Vieira</a>. :)]</p>
<p>Como eu havia dito, não achei artigos em português explicando como fazer o deploy de aplicações Rails usando mod_proxy_balancer e mongrel_cluster, por isso resolvi escrever um.</p>
<p>Os comandos a seguir foram testados em um Ubuntu 7.04 Server Edition, mas devem servir para qualquer distro Debian-based.</p>
<p>Será necessário ter instalado os seguintes programas:</p>
<ul>
<li>Apache 2.2.x</li>
<li>mod_proxy_balancer</li>
<li>mongrel</li>
<li>mongrel_cluster</li>
<li>Ruby</li>
<li>Rails</li>
</ul>
<p><span id="more-61"></span></p>
<h3>Preparando o terreno</h3>
<p>Instalando o compilador <span class="caps">GCC</span> e as ferramentas de desenvolvimento</p>
<pre><code>sudo apt-get install build-essential</code></pre>
<p>E agora o Ruby</p>
<pre><code>sudo apt-get install ruby ruby1.8-dev ruby1.8 ri1.8 rdoc1.8 irb1.8 libreadline-ruby1.8 libruby1.8</code></pre>
<h3>Apache e seus módulos</h3>
<p>Instalando Apache</p>
<pre><code>sudo apt-get install apache2</code></pre>
<p>Configurando os módulos necessários</p>
<pre><code>sudo a2enmod proxy_balancer
sudo a2enmod proxy
sudo a2enmod proxy_connect
sudo a2enmod proxy_ajp
sudo a2enmod proxy_ftp
sudo a2enmod proxy_http
sudo a2enmod rewrite</code></pre>
<p>Reiniciando o Apache para que os módulos sejam habilitados</p>
<p> </p>
<p> </p>
<p> </p>
<p><code></p>
<pre>sudo /etc/init.d/apache2 force-reload</pre>
<p></code></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<h3>MySQL</h3>
<p>Primeiramente, instale o MySQL</p>
<pre><code>sudo apt-get install mysql-server</code></pre>
<p>E agora, instale os bindings do MySQL para o Ruby</p>
<pre><code>sudo apt-get install libmysql-ruby1.8</code></pre>
<h3>RubyGems e Rails</h3>
<p>Vamos baixar a última versão do RubyGems e instalar</p>
<pre><code>wget http://rubyforge.org/frs/download.php/20585/rubygems-0.9.3.tgz
tar xvzf rubygems-0.9.3.tgz
cd rubygems-0.9.3
sudo ruby setup.rb</code></pre>
<p><code> </code></p>
<p> </p>
<p>Agora, o Rails</p>
<pre><code>sudo gem install rails -y</code></pre>
<h3>Mongrel e mongrel_cluster</h3>
<p>Ao ser perguntado por qual versão instalar, escolha a versão mais nova, que não seja a mswin32</p>
<pre><code>sudo gem install mongrel mongrel_cluster -y</code></pre>
<h3>Criando uma nova aplicação Rails e configurando o cluster</h3>
<p>Vamos criar uma aplicação Rails para teste:</p>
<pre><code>rails teste
cd teste</code></pre>
<p>E agora, vamos configurar o cluster mongrel</p>
<pre><code>mongrel_rails cluster::configure -e production -p 8000 -a 127.0.0.1 -N 3 -c /sua/app/rails/teste/</code></pre>
<p>Esta linha escreverá um arquivo chamado <em>mongrel_cluster.yml</em> dentro da pasta config, configurando nosso cluster para rodar em modo de produção (-e production), começando na porta 8000 (-p 8000), no endereço 127.0.0.1 (-a 127.0.0.1) com 3 instâncias do mongrel (-N 3). Dessa maneira, nossas instâncias só estarão disponíveis para ser acessadas através da máquina local, não é necessário expor o mongrel para toda a internet, já que é apenas o Apache rodando na máquina local que deverá ter acesso à eles.</p>
<p>Agora, vamos colocar nosso mongrel como um serviço que iniciará junto com nosso sistema. Primeiro, vamos copiar o arquivo de inicialização que a gem do mongrel_cluster disponibiliza pra gente</p>
<pre><code>sudo ln -s /usr/lib/ruby/gems/1.8/gems/mongrel_cluster-0.2.1/resources/mongrel_cluster /etc/init.d/
sudo chmod +x /etc/init.d/mongrel_cluster</code></pre>
<p>Agora, vamos adicionar nosso script como um serviço do sistema</p>
<pre><code>sudo /usr/sbin/update-rc.d mongrel_cluster defaults</code></pre>
<p>O script de inicialização, procura por todos .yml dentre de: /etc/mongrel_cluster/, então, vamos criar este diretório e linkar nosso arquivo de configuração para lá</p>
<pre><code>sudo mkdir -p /etc/mongrel_cluster
sudo ln -s /sua/app/rails/teste/config/mongrel_cluster.yml /etc/mongrel_cluster/teste.yml</code></pre>
<h3>Configurando o Apache</h3>
<p>Vamos criar um novo VirtualHost no apache</p>
<pre><code>touch /etc/apache2/sites-available/rails
sudo a2ensite rails</code></pre>
<p>Use esta configuração para o arquivo que o apache acabou de criar em: /etc/apache2/sites-enabled/rails:</p>
<pre class="apache"><code>&lt;VirtualHost *&gt;
  <span class="kw1">ServerName</span> exemplorails.com.br
  <span class="kw1">ErrorLog</span> /sua/app/rails/teste/log/errors.log
  <span class="kw1">CustomLog</span> /sua/app/rails/teste/log/apache.log combined
 
  &lt;Directory <span class="st0">"/sua/app/rails/teste/public/"</span>&gt;
    <span class="kw1">Options</span> <span class="kw2">FollowSymLinks</span>
    <span class="kw1">AllowOverride</span> <span class="kw2">None</span>
    <span class="kw1">Order</span> <span class="kw1">allow</span>,<span class="kw1">deny</span>
    <span class="kw1">Allow</span> <span class="kw1">from</span> <span class="kw1">all</span>
  &lt;/Directory&gt;
 
  <span class="kw1">RewriteEngine</span> <span class="kw2">On</span>
 
  <span class="co1"># Check for maintenance file and redirect all requests</span>
  <span class="co1">#  ( this is for use with Capistrano's disable_web task )</span>
  <span class="kw1">RewriteCond</span> %<span class="br0">{</span>DOCUMENT_ROOT<span class="br0">}</span>/system/maintenance.html -f
  <span class="kw1">RewriteCond</span> %<span class="br0">{</span>SCRIPT_FILENAME<span class="br0">}</span> !maintenance.html
  <span class="kw1">RewriteRule</span> ^.*$ /system/maintenance.html <span class="br0">[</span>L<span class="br0">]</span>
 
  <span class="co1"># Rewrite index to check for static</span>
  <span class="kw1">RewriteRule</span> ^/$ /index.html <span class="br0">[</span>QSA<span class="br0">]</span>
 
  <span class="co1"># Rewrite to check for Rails cached page</span>
  <span class="kw1">RewriteRule</span> ^<span class="br0">(</span><span class="br0">[</span>^.<span class="br0">]</span>+<span class="br0">)</span>$ $<span class="nu0">1</span>.html <span class="br0">[</span>QSA<span class="br0">]</span>
 
  <span class="co1"># Redirect all non-static requests to cluster</span>
  <span class="kw1">RewriteCond</span> %<span class="br0">{</span>DOCUMENT_ROOT<span class="br0">}</span>/%<span class="br0">{</span>REQUEST_FILENAME<span class="br0">}</span> !-f
  <span class="kw1">RewriteRule</span> ^/<span class="br0">(</span>.*<span class="br0">)</span>$ balancer://mongrel_cluster%<span class="br0">{</span>REQUEST_URI<span class="br0">}</span> <span class="br0">[</span>P,QSA,L<span class="br0">]</span>
 
  <span class="co1"># Deflate</span>
  AddOutputFilterByType DEFLATE text/html text/plain text/css
  <span class="co1"># ... text/xml application/xml application/xhtml+xml text/javascript</span>
  <span class="kw1">BrowserMatch</span> ^Mozilla/<span class="nu0">4</span> gzip-only-text/html
  <span class="kw1">BrowserMatch</span> ^Mozilla/<span class="nu0">4.0</span><span class="br0">[</span><span class="nu0">678</span><span class="br0">]</span> no-gzip
  <span class="kw1">BrowserMatch</span> bMSIE !no-gzip !gzip-only-text/html
 
  &lt;Proxy *&gt;
    <span class="kw1">Order</span> <span class="kw1">allow</span>,<span class="kw1">deny</span>
    <span class="kw1">Allow</span> <span class="kw1">from</span> <span class="kw1">all</span>
  &lt;/Proxy&gt;
 
  &lt;Proxy balancer://mongrel_cluster&gt;
    BalancerMember http://<span class="nu0">127.0</span><span class="nu0">.0</span><span class="nu0">.1</span>:<span class="nu0">8000</span>
    BalancerMember http://<span class="nu0">127.0</span><span class="nu0">.0</span><span class="nu0">.1</span>:<span class="nu0">8001</span>
    BalancerMember http://<span class="nu0">127.0</span><span class="nu0">.0</span><span class="nu0">.1</span>:<span class="nu0">8002</span>
  &lt;/Proxy&gt;
 
&lt;/VirtualHost&gt;</code></pre>
<h3>Finalização</h3>
<p>Agora vamos reiniciar o apache</p>
<pre><code>sudo /etc/init.d/apache2 force-reload</code></pre>
<p>E iniciar nosso cluster mongrel</p>
<pre><code>sudo /etc/init.d/mongrel_cluster start</code></pre>
<p>Já podemos acessar nosso domínio, que nossa aplicação Rails deverá funcionar. Caso não funcione, dê uma olhada nos logs do Apache e de sua aplicação Rails.</p>
<p>Fonte:<br />
<a href="http://www.simplisticcomplexity.com/2006/8/13/apache-2-2-mod_proxy_balancer-mongrel-on-ubuntu-6-06">Apache 2.2, mod_proxy_balancer, &amp; Mongrel on Ubuntu 6.06</a><br />
<a href="http://blog.codahale.com/2006/06/19/time-for-a-grown-up-server-rails-mongrel-apache-capistrano-and-you/">Time For A Grown-Up Server: Rails, Mongrel, Apache, Capistrano and You</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.arthurgeek.net/configurando-rails-com-apache-2-2-x-mod_proxy_balancer-mongrel_cluster/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>
