RVM: Desenvolvimento responsável em Ruby e Rails! Veja como instalar e usar.
by gregoriomelo on abril 16, 2011
Ruby Version Manager, vulgo RVM. Se você quer se sentir mais responsável enquanto desenvolve aplicações em Ruby e Rails, use! E não é complicado.
O que é o RVM?
RVM é uma ferramenta fantástica que vai lhe ajudar a gerenciar as instalações de interpretadores Ruby. Para iniciantes, isso pode até parecer totalmente desnecessário, mas se você pretende ser um programador melhor e mais responsável, vale muito a pena aprender.
Conto de fadas real
Vejamos se contar uma historinha ajuda: SistemasFantásticos (SF)* é uma empresa que vem se destacando no cenário nacional de desenvolvimento de software e há anos utiliza principalmente o Rails. SF tem um projeto grande em desenvolvimento há 2 anos, o SistemaGlorioso, feito em Rails 2.3.2 e Ruby 1.8. E tem um projeto novo, o SistemaBrilhante, recém-criado com o Rails 3.0.5 e Ruby 1.9.2. Aí a SF contrata João, que, inicialmente trabalhará com o Brilhante.
*espero que este nome não esteja reservado
Logo nos primeiros dias ele instala o Rails 3 e o Ruby 1.9.2 e já vai metendo a mão no código. Com pouco tempo, sua chefa, Maria, aloca-o pra corrigir um bug no Glorioso:
Maria: — João, bora ali corrigir um bugzinho…
João: — Beleza! É só baixar o código e começar!
Pobre João… Ele baixa o código e vê um monte de coisa quebrar. Mesmo com pouca experiência ele percebe que o ambiente dele não está adequado e ele vai precisar substituir as versões de Ruby e de Rails… Desinstalar ambos…
Não com muita facilidade, ele consegue. Depois resolve o bug e manda pro repositório. Daí Maria, comunicada sobre o encerramento da atividade, realoca-o no Brilhante.
João: — Lasquei-me! (irrelevante se as pessoas usam ou não a ênclise ao falar)
Ele lembra que vai ter que fazer o mesmo serviço trabalhoso: remover o Rails 2.3.2 e o Ruby 1.8 pra instalar as versões mais novas… Não sabia ele que poderia conversar com Pedro, que o aponta os milagres que o RVM pode providenciar nessa hora…
O que o RVM faz
O RVM lhe ajuda a gerenciar as instalações de Ruby e as gems instaladas na sua máquina (rails, bundler, sinatra…).
Então Pedro diz a João que ele pode ter várias versões de Ruby instaladas na máquina e pra mudar de uma pra outra basta um simples comando. É quase instantâneo. No caso de João, ele usaria o RVM pra instalar cada uma das versões do Ruby. E, de acordo com os requisitos de cada projeto, ele executaria um simples comando dizendo qual versão do Ruby ele deseja. Além disso, o RVM gerencia também as gems que estão instaladas.
Se há um terceiro projeto na SF que utiliza Ruby 1.8 e Rails 3, em vez de Rails 2.3. Então temos a seguinte configuração:
- Ruby 1.8 e Rails 2.3
- Ruby 1.8 e Rails 3
- Ruby 1.9 e Rails 3
São 2 versões de Ruby para 2 versões de Rails, mas em 3 configurações diferentes. Imagina o sofrimento de, apesar de ter a mesma versão do Ruby, remover as gems e instalar tudo de novo de acordo com a versão do Rails desejada…
Aí entram os Gemsets!
O que são gemsets
Gemsets são conjuntos de gems. No caso acima, temos um conjunto de gems que atendem ao Rails 2.3 e outro conjunto de gems que atendem ao Rails 3. Se João for trabalhar num projeto que não usa Rails, e sim Sinatra, ele criaria um novo gemset para colocar as gems que atendem ao Sinatra e seu projeto. Nesse gemset não teria nada que fizesse referência às gems do Rails. Quando ele voltar pro projeto que usa Rails, basta só um comando e pronto. Suas gems para Rails estarão visíveis novamente. E, da mesma forma, nada de Sinatra na gemset.
Como instalar o RVM
Você precisa ter o curl e o make (e afins) instalados. Tanto no Linux quanto no Mac, o seguinte comando resolve a instalação:
bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"' >> .bash_profile
source ~/.bash_profile
A primeira linha faz o download do RVM. A segunda, configura o RVM para que seja iniciado sempre que o usuário fizer o login. A terceira, o importa para a sessão atual.
Certifique-se que a instalação está OK com o seguinte comando:
type rvm | head -1
Se o retorno for :
rvm is a function
Então, prossigamos.
Como utilizar o RVM
Para verificar as versões do Ruby instaladas, execute o seguinte comando:
rvm list
São grandes as chances de não haver nenhuma instala, já que ainda não fizemos o RVM instalar nenhuma.
Instalar versões do Ruby com o RVM
Agora instalemos a versão 1.8.7:
rvm install 1.8.7
O RVM fará o download do código fonte da versão 1.8.7 do Ruby, fará a compilação e depois a instalação. Aguarde um pouco e depois veja que há o seguinte diretório:
$HOME/.rvm/rubies/ruby-1.8.7-p334/
Isso quer dizer que a versão 1.8.7 do Ruby, com o patch p334, está instalada dentro dos diretórios do usuário. Isto é muito importante, tendo em vista que esta instalação não estará disponível para outros usuários.
Agora que a versão 1.8.7 foi instalada, podemos utilizá-la e defini-la como padrão:
rvm use 1.8.7 --default
Se você executar o comando ‘which ruby’, o resultado mostrará o diretório ao qual me referi acima.
Para instalar a versão 1.9.2:
rvm install 1.9.2
O mesmo procedimento acontece, e agora há o seguinte diretório:
$HOME/.rvm/rubies/ruby-1.9.2-p180/
A versão 1.8.7 ainda está em uso. Se quiser utilizar a versão 1.9.2, recém-instalada:
rvm use 1.9.2 --default
Com as versões devidamente instaladas, vamos tratas os gemsets.
Instalar gems com o RVM
Para o nosso exemplo, vamos voltar para a versão 1.8.7:
rvm use 1.8.7 --default
Vamos criar um gemset para trabalharmos com o Rails 2.3.11:
rvm gemset create rails2311
Será exibido um aviso indicando que o gemset foi criado. Agora, utilizemo-no:
rvm use 1.8.7@rails2311 --default
Perceba que o comando agora indica a gemset. Traduzindo, o comando diz ao RVM para utilizar a versão 1.8.7 e o gemset rails2311. Quando o gemset não é indicado, é utilizado o padrão, ‘global’, que pode ser visto com o comando:
rvm gemset list
Se você executar o comando ‘which gem’, verá que o comando gem utilizado será o que é tratado pelo RVM. Instalemos a versão 2.3.11 do Rails:
gem install rails -v 2.3.11
Execute ‘gem list’ e confira as gems instaladas.
Agora criemos um gemset para rails 3.0.5: rvm gemset create rails305
rvm use 1.8.7@rails305 --default
Se você executar ‘gem list’, verá que só há o Rake instalado. Vamos instalar o Rails 3.0.5:
gem install rails -v 3.0.5 --no-ri --no-rdoc
O comando ‘gem list’ mostra as gems instaladas. Perceba que as gems listadas não são as mesmas do gemset rails2311.
Tenho criado gemsets separadas para cada projeto, mesmo que as versões de Ruby e do Rails sejam as mesmas. Assim, o ambiente fica ainda mais controlado. Ainda, algumas vezes, apesar de termos a mesma versão do Ruby e do Rails, uma ou outra gem possui versão diferente entre projetos, ou talvez você esteja experimentando uma gem em fase alfa, beta, RC… No meu post sobre OAuth, eu mantinha um gemset exclusivo para a aplicação criada, tal gemset chamado de ‘twitterfriend’. Nada mais sugestivo :)
Ainda melhor com o Bundler
Em breve escreverei algo sobre o Bundler. Depois que aprendi sobre a fantástica combinação RVM + Bundler, o controle do ambiente de desenvolvimento nunca alcançou nível tão alto.
Enquanto o post não sai, não perca tempo esperando e leia sobre o Bundler:
3 comments
Pow brother , to usando o Ubuntu 11.4 e está dando esse problema :
ERROR: Loading command: install (LoadError)
no such file to load — zlib
ERROR: While executing gem … (NameError)
uninitialized constant Gem::Commands::InstallCommand
Já removi o ruby em questão e instalei o Zlib
sudo aptitude install build-essential libssl-dev libreadline5 libreadline5-dev zlib1g zlib1g-dev
Mais nada deu certo .
Please!!!
by Adriano Carvalho on 10 de maio de 2011 at 23:08. #
Adriano,
instale o pacote do zlib para a RVM:
rvm package install zlib
Aí remova a RVM e instale novamente assim:
rvm install 1.9.2 –with-zlib-dir=$HOME/.rvm/usr
Se acontecer a mesma coisa com o OpenSSL e o ReadLine, faça a instalação dos dois assim:
rvm package install openssl
rvm package install readline
Remova a RVM e instale novamente assim:
rvm install 1.9.2 –with-zlib-dir=$HOME/.rvm/usr –with-readline-dir=$HOME/.rvm/usr –with-openssl-dir=$HOME/.rvm/usr
Valeu!
by gregoriomelo on 13 de maio de 2011 at 9:19. #
Fantástico Gregório, ajudou muito! O que eu ainda “me bato” muito é a integração com o Passenger! (talvez um assunto para um novo post? ^^)
Apesar de ter seguido algunS tutoriais ainda recebo a mensagem “gem rails (3.0.7) not found”, sendo que no gem list o rails 3.0.7 aparece :( Acho que é um problema nos PATHS…
by Bruno Tavares on 29 de maio de 2011 at 12:28. #