Recentemente foi lançado o Phusion Passenger, mais conhecido como mod_rails. Trata-se de um módulo Apache para Rails que promete oferecer configuração e deploy de aplicações mais simplificado do que com o Mongrel, além de ser mais estável e utilizar menos memória.
Tentei instalar o mod_rails e encontrei várias dificuldades. Inicialmente tentei instalar no CentOS 4.4, mas não consegui. Encontrei alguns conflitos de versões de pacotes (pré-requisitos do mod_rails), e ainda não consegui concluir a instalação.
Em seguida, tentei instalar no Ubuntu 7.10. As dificuldades foram menores, mas ainda assim não foi tão simples quanto parece pelo guia do usuário. Segue o passo-a-passo da instalação:
- Instalar os pré-requisitos:
sudo apt-get install apache2-mpm-prefork apache2-prefork-dev libapr1-dev
- Instalar o gem do mod_rails:
sudo gem install passenger
- Definir as seguintes variáveis de ambiente:
export HTTPD=/path/to/httpd export APXS=/path/to/apxs (ou apxs2)
- Executar o script de instalação do módulo Apache:
sudo /usr/lib/ruby/gems/1.8/gems/passenger-1.0.1/bin/passenger-install-apache2-module
- Habilitar o mod_rails no httpd.conf do Apache, adicionando as linhas a seguir:
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-1.0.1/ext/apache2/mod_passenger.so RailsSpawnServer /usr/lib/ruby/gems/1.8/gems/passenger-1.0.1/bin/passenger-spawn-server RailsRuby /usr/bin/ruby1.8 RailsEnv PROD
A última linha acima define o ambiente Rails que será utilizado. Se você omitir esta linha, será usado o ambiente padrão (production).
- criar um virtual host no Apache:
<virtualHost *:80> ServerName localhost DocumentRoot /var/www/rails/public </virtualHost>
Na configuração acima, DocumentRoot é o diretório public da sua aplicação Rails.
Ao concluir estas configurações e reiniciar o Apache, minha aplicação funcionou, porém os arquivos que estão no diretório public (arquivos javascript, css e imagens) não estavam acessíveis. Para resolver este problema:
- habilite o mod_rewrite
- adicione à configuração do virtual host:
<directory "/var/www/rails/public" > Options FollowSymLinks AllowOverride All </directory> - reinicie o Apache
Assim, finalmente consegui fazer a aplicação funcionar corretamente. Ainda não fiz nenhum benchmark comparando o mod_rails com o Mongrel, mas todos os que encontrei até agora são favoráveis ao mod_rails, como estes:


Como faço para configurar mais de uma app rails no mod_rails.
#
# ServerName app.agenda
# DocumentRoot /var/www/rails/agenda/public
#
#
# ServerName app.livraria
# DocumentRoot /var/www/rails/livraria/public
#
isso no mac funciona, porque eu defino os hosts também
127.0.0.1 localhost app.agenda app.livraria
porém no linux (ubuntu) não achei esse arquivo.
Poderia me ajudar?
vlw
Thiago, no Linux o procedimento é o mesmo. O arquivo para configuração de hosts é /etc/hosts
É eu terminei descobrindo isso. vlw
Só acho estranho que nenhum tutorial de instalação de mod_rails no linux fala disso, já os tutoriais pro mac todos abordam. Por acaso no linux tem alguma outra forma de configurar multiplas apps rails sem definir no /etc/hosts ?
Até onde eu sei, é necessário definir um nome para cada app mesmo. Encontrei um artigo aborda essa configuração:
http://nubyonrails.com/articles/ask-your-doctor-about-mod_rails