Guilherme Garnier

Desenvolvimento de software e Open Source

Instalação do mod_rails

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:

    1
    
    sudo apt-get install apache2-mpm-prefork apache2-prefork-dev libapr1-dev
    
  • Instalar a gem do mod_rails:

    1
    
    sudo gem install passenger
    
  • Definir as seguintes variáveis de ambiente:

    1
    2
    
    export HTTPD=/path/to/httpd
    export APXS=/path/to/apxs (ou apxs2)
    
  • Executar o script de instalação do módulo Apache:

    1
    
    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:

    1
    2
    3
    4
    
    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:

    1
    2
    3
    4
    
    <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:

    1
    2
    3
    4
    
    <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:

Comments