Instalando Ruby on Rails e Gem no linux

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

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/

Feito por: Marcos Miras

Leave a Reply