Todos já devem ter conferido o tutorial do Brunno sobre como instalar e utilizar o RVM, se não conferiu, confira!

Que tal isolar cada Virtual Host utilizando o apache para isolar o gemset utilizada para cada projeto?

Mãos a massa, você vai precisar de:

  • Apache2
  • Ruby 1.8.7
  • RVM 1.6.32
  • Passenger 3.0.8

* as versões são as que eu estou utilizando neste tutorial

Primeiro vamos decidir qual será o gemset utilizado, já decidiu? No nosso exemplo utilizaremos o gemset ruby-1.8.7-p352@abstraindo, então:

rvm gemset create abstraindo
rvm gemset use abstraindo

Abra seu httpd.conf, este pode estar em algum desse lugares:

  • Linux: /etc/apache2/conf/
  • MacPorts: /opt/local/apache2/conf/
  • Nativo MacOS: /etc/apache2/

Verifique se a seguinte linha está comentada, caso esteja: descomente-a.

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

Agora abra o arquivo httpd-vhost.conf, adicione as configurações de Virtual Host:

# Abstraindo
<VirtualHost *:80>
    ServerName dev.abstraindo.com
    DocumentRoot "/wolcan/rails_app/abstraindo/public/"
    RailsEnv "development"
    <Directory /wolcan/rails_app/abstraindo/public/>
        Options -MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

Certo?

Agora vá ao terminal/console e digite:

rvm gemset use abstraindo

Caso você tenha mais de uma versão de Ruby instalado na sua máquina será necessário informar a versão do Ruby anteriormente.

Reinicie o apache e teste: http://dev.abstraindo.com

Funcionou? Caso você não tenha funcionado, verifique se a pasta existe ou se você não cometeu algum erro de digitação.

Agora vamos isolar o virtual host em um gemset específico, abra novamente o arquivo httpd-vhost.conf e adicione as seguintes linhas para nossa configuração:

# Abstraindo
<VirtualHost *:80>
    ServerName dev.abstraindo.com
    DocumentRoot "/wolcan/rails_app/abstraindo/public/"
    RailsEnv "development"
    <Directory /wolcan/rails_app/abstraindo/public/>
        Options -MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

    SetEnv GEM_HOME /Users/Wolcanus/.rvm/gems/ruby-1.8.7-p352@abstraindo
    SetEnv GEM_PATH /Users/Wolcanus/.rvm/gems/ruby-1.8.7-p352@abstraindo:/Users/Wolcanus/.rvm/gems/ruby-1.8.7-p352:/Users/Wolcanus/.rvm/gems/ruby-1.8.7-p352@global

</VirtualHost>

No exemplo, estou definindo o seguinte:

GEM_HOME: Apontando para meu gem_path do gemset ruby-1.8.7-p352@abstraindo

GEM_PATH: Aponto para o gemset do @abstraindo, ruby-1.8.7 e para o gemset @global

Salve o arquivo, reinicie o apache e teste!

Funcionou? É isso aí! Qualquer dúvida é só comentar =)

Fontes:

Isolating gem sets under Passenger with RVM

RVM FAQ

, , , ,