Instalando Ruby on Rails e Gem no linux
Posted setembro 28th, 2008 by WillemBom 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