Ruby + Rails + Gem + Mongrel Cluster + Apache + MySQL n0 Red Hat EL

utor: Marcos Rodolfo de Paula Miras

Introdução

Bom galera, faz umas semanas que estava quebrando a cabeça para fazer funcionar um servidor Rails com o Mongrel Cluster e o Apache.
Como muitos desenvolvedores de Ruby não utilizam o RHEL e sim o Debian
(ou distro baseadas em Debian), resolvi deixar esse post aos caros
colegas administradores de rede que acabam pegando essas buchas. :S

Lembrando que você deve ter o GCC (tralhas & cia) para
compilação e etc… Quem irá instalar o servidor selecione na
instalação a opção de "Development" que ele instala. E também quem
escolher a opção "Everthing" deve após a instalação desinstalar o Ruby
que vem nativo (rpm -e ruby.x.x), já tive problemas com isso.

Iremos ver: Instalação do Ruby, Gems, Rails, MySQL, Mongrel, Mongrel Cluster e Apache Configuração do Mongrel e Apache.

Então, vamos à obra…

Instalação do Ruby, Gems, Rails e MySQL

Os arquivos eu deixarei num diretório chamado /opt/RoR (ruby on rails).

Instalaremos primeiramente o Ruby:

# cd /opt/RoR
# wget
http://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6.tar.gz
# tar zxvf ruby-1.8.6.tar.gz
# cd ruby-1.8.6
# ./configure
# make
# make install

Agora o Gems, para quem tem dúvidas o Gems é parecido com o
apt-get e o yum, ele gerencia os aplicativos para baixar e instalar,
com um detalhe, com apenas um comando ele faz tudo (download, instala,
…), muito bacana.

# cd ..
# wget
http://rubyforge.org/frs/download.php/28174/rubygems-0.9.5.tgz
# tar zxvf rubygems-0.9.5.tgz
# cd rubygems-0.9.5
# ruby setup.rb

É a vez do Rails agora. Perceba a funcionalidade do Gems:

# gem install rails –include-dependencies

Sem um banco de dados não vamos muito longe. Caso você já tenha o DB, não é necessário instalar novamente.

# gem install mysql

Certo, terminamos o estágio que o programador mais gosta, funcionar! rs

Criando o banco, configurando sua aplicação e acessando

Entre no banco de dados e crie o banco:

# mysql -p
mysql> create database nomedobanco_production;
mysql> create database nomedobanco_development;
mysql> use nomedobanco_production;
mysql> grant all privileges on *.* to admin@’localhost’ identified by ‘123456’;
mysql> flush privileges;
mysql> use nomedobanco_development;
mysql> grant all privileges on *.* to admin@’localhost’ identified by ‘123456’;
mysql> flush privileges;
mysql> quit

Coloque a aplicação em um determinado diretório (utilizarei de exemplo /suaapp):

# cd /suaapp
# vi conf/database.yml

Altere os seguintes campos:

development:
adapter: mysql
database: nomedobanco_development
username: admin
password: 123456
host: localhost
socket: /tmp/mysql.sock

production:
adapter: mysql
database: nomedobanco_production
username: admin
password: 123456
host: localhost
socket: /tmp/mysql.sock

Criando as tabelas, lembre-se de estar dentro do diretório da sua app:

# rake db:migrate

Pronto, veremos agora se está tudo ok:

# ruby script/server

Acesse sua aplicação:

http://ip_do_server:3000

Instalando e configurando o Mongrel com Apache / Parte 1

Pressione CTRL+C para continuarmos.

Crie um usuário chamado mongrel, necessário para "rodar" o cluster.

# useradd mongrel

Vamos instalar o Mongrel, que é um servidor para aplicações
desenvolvidas em Ruby on Rails. O mongrel cluster é para fazermos
balanceamento de instâncias.

# gem install mongrel
# gem install mongrel_cluster

Se você "levantar" o script/server, observe que ele carregará o Mongrel.

# mongrel_rails cluster::configure -e production -p 6000 -a 127.0.0.1 -N 5 -c /suaapp

Onde:

  • N = número de instâncias;
  • e = se produção ou desenvolvimento;
  • p = Porta de comunicação;
  • c = local onde está sua aplicação.

Crie uma pasta no /etc onde o Mongrel irá ler estas configurações:

# mkdir /etc/mongrel_cluster
# ln -s /suaapp/conf/mongrel_cluster.yml /etc/mongrel_cluster/suaapp.yml

Agora o Apache, muitos admins não sabem o porque dessa
interação, bem podemos dizer que o Apache irá administrar o conteúdo
estático (imagens,…) da aplicação, fará também o gerenciamento do
cluster e fará a segurança, se necessário fazer uma conexão segura
(SSL) deveremos fazer também com o apache.

# wget http://apache.rmplc.co.uk/httpd/httpd-2.2.6.tar.gz
# tar xvfz httpd-2.2.3.tar.gz
# cd httpd-2.2.3/
#
./configure –prefix=/usr/local/apache2 –enable-mods-shared=all
–enable-deflate –enable-proxy –enable-proxy-balancer
–enable-proxy-http
# make
# make install

Crie um link para os módulos na sua pasta de configurações do apache:

# ln -s /usr/local/apache2/modules /usr/local/apache2/conf/modules

Vamos configurar um virtual host para nossa app:

# vi /usr/local/apache2/conf/httpd.conf

Você deve habilitar os seguintes módulos:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so

Instalando e configurando o Mongrel com Apache / Parte 2

Inclua no final do arquivo a seguinte configuração:

<VirtualHost *>
  ServerName redhatonrails
  ErrorLog /suaapp/log/errors.log
  CustomLog /suaapp/log/apache.log combined

  <Directory "/suaapp/public/">
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>

  RewriteEngine On

  # Check for maintenance file and redirect all requests
  #  ( this is for use with Capistrano’s disable_web task )
  RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
  RewriteCond %{SCRIPT_FILENAME} !maintenance.html
  RewriteRule ^.*$ /system/maintenance.html [L]

  # Rewrite index to check for static
  RewriteRule ^/$ /index.html [QSA]

  # Rewrite to check for Rails cached page
  RewriteRule ^([^.]+)$ $1.html [QSA]

  # Redirect all non-static requests to cluster
  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
  RewriteRule ^/(.*)$ balancer://mongrel_cluster%{REQUEST_URI} [P,QSA,L]

  # Deflate
  AddOutputFilterByType DEFLATE text/html text/plain text/css
  # … text/xml application/xml application/xhtml+xml text/javascript
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4.0[678] no-gzip
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

  <Proxy *>
    Order allow,deny
    Allow from all
  </Proxy>

  <Proxy balancer://mongrel_cluster>
    BalancerMember http://127.0.0.1:6000
    BalancerMember http://127.0.0.1:6001
    BalancerMember http://127.0.0.1:6002
    BalancerMember http://127.0.0.1:6002
    BalancerMember http://127.0.0.1:6002
  </Proxy>

</VirtualHost>

Vamos criar um arquivo de inicialização para o Mongrel Cluster:

# ln -s /usr/local/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/\
resources/mongrel_cluster /etc/rc.d/init.d/mongrel_cluster
# chmod +x /etc/rc.d/init.d/mongrel_cluster

Inicie o Mongrel e o Apache:

# /usr/local/apache2/bin/apachectl start
# /etc/rc.d/init.d/mongrel_cluster start

Só correr para o abraço e acessar sua aplicação…

http://ip_do_server/

É isso aí, espero ter ajudado!

Abraços,
Marcos Miras
marcosmiras@atmsystem.com.br


http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=7541

2 comentários sobre “Ruby + Rails + Gem + Mongrel Cluster + Apache + MySQL n0 Red Hat EL

  1. Hi,Do you need advertisement screens, LCD digital signage and LCD signages? Please go Here:www.amberdigital.com.hk(Amberdigital).we have explored and developed the international market with professionalism. We have built a widespread marketing network, and set up a capable management team dedicated to provide beyond-expectation services to our customers.
    amberdigital Contact Us
    E-mail:sstar@netvigator.com
    website:www.amberdigital.com.hk
    alibaba:amberdigital.en.alibaba.com[bhc

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s