JavaFree.org | RubyOnBr.org

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

Acompanhar Ruby + Rails + Gem + Mongrel Cluster + Apache + MySQL no Red Hat EL 5 posts, 4 participantes

100_7627 Marcos Miras 9 posts

Como existem muitos admins de Linux que não conhecem bem o RoR e necessitam colocar a aplicação para rodar, decidi postar.
Resolvi postá-lo devido a necessidade que senti de artigos do Ruby(Rails, Mongrel,…) rodando em servers Red Hat (chapéu vermelho, ruby… ao menos combinam… rs)
Então vamos lá…

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.

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

Instalaremos primeiramente o Ruby

  1. cd /opt/RoR
  2. wget http://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6.tar.gz
  3. tar zxvf ruby-1.8.6.tar.gz
  4. cd ruby-1.8.6
  5. ./configure
  6. make
  7. make install

Agora o Gems, para quem tem duvidas 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

    Entre no banco de dados e crie o banco:

    1. 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)

    1. cd /suaapp
    2. 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:

    1. rake db:migrate

    Pronto veremos agora se está tudo ok:
    
    	
  • ruby script/server

  • Acesse sua aplicação:

    http://ip_do_server:3000

    Pressione CRTL+C para continuarmos.

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

    1. useradd mongrel

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

    instâncias.

    1. gem install mongrel
    2. 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 instancias, 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:

    1. mkdir /etc/mongrel_cluster
    2. 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.

    1. wget http://apache.rmplc.co.uk/httpd/httpd-2.2.6.tar.gz
    2. tar xvfz httpd-2.2.3.tar.gz
    3. cd httpd-2.2.3/
    4. ./configure —prefix=/usr/local/apache2 —enable-mods-shared=all —enable-deflate —enable-proxy —enable-proxy-balancer —enable-proxy-http
    5. make
    6. make install

    Crie um link para os modulos 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

    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


    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 /{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.0678 no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

    <Proxy *>
    Order allow,deny
    Allow from all


    <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:6003
    BalancerMember http://127.0.0.1:6004



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

    1. 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
    2. 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
  • editado::formatação::shairon

    É isso aí, espero ter ajudado!

    Abraços,

    Marcos Miras

    marcosmiras@atmsystem.com.br



    Fontes: http://www.redhat.com/magazine/025nov06/features/ruby/

    http://blog.codahale.com/2006/06/19/time-for-a-grown-up-server-rails-mongrel-apache-capistrano-and-you/

    http://smartic.us/2007/9/4/smarticast-4-rails-rumble-primer

     
    Avatar Arthur Martins 106 posts

    Boa garoto!
    Legal!

     
    Avatar_h Shairon Toledo 1205 posts

    Muito bom cara!

     
    A013c064de659bbff814eb1f4410446b?s=80 Clovis 749 posts

    Rappaz.. semana passada eu tive que fazer isso ai na unha, sem manjar de linux, hheheh mas agora se tiver que fazer novamente, ja vou estar craque..

    Rappaz.. semana passada eu tive que fazer isso ai na unha, sem manjar de linux, hheheh mas agora se tiver que fazer novamente, ja vou estar craque..valeu!!!

    Rappaz.. semana passada eu tive que fazer isso ai na unha, sem manjar de linux, hheheh mas agora se tiver que fazer novamente, ja vou estar craque..valeu!!!:D

     
    100_7627 Marcos Miras 9 posts

    Lembrete! Quem for tentar utilizar o apache nativo do RHEL não vai conseguir, pois ele não possui o mod_proxy_balancer (modulo do apache)…