Usando melhor o RVM: trabalhando com gemsets

O RVM (Ruby Version Manager) é uma ferramenta que permite que se trabalhe com diferentes versões de Ruby numa mesma máquina de forma simples.

A ideia desse post não é falar sobre como configurar o RVM do zero. Caso esteja interessado nisso, dê uma lida no post do Fabio Akita.

Uma das coisas mais comuns em tempos de Rails 3 é possuirmos aplicações já feitas em Rails 2, e enquanto isso queremos desenvolver em Rails 3. A solução para trabalharmos de forma simples e organizada com gems de versões diferentes dentro de uma mesma versão de ruby é usando as gemsets do RVM.

Uma gemset, como o próprio nome diz, é um conjunto de gems, no qual você atribui um nome para elas, e consegue alternar entre os mesmos facilmente. Dessa forma, podemos alternar entre diferentes versões de gems executando um simples comando no shell. Isso é útil para testarmos compatibilidades entre os nosso código e as versões das gems que ele utiliza.

O primeiro passo para criar uma gemset, considerando que o RVM já esteja instalado é: rvm gemset create nome_da_gemset. Com isso, uma nova gemset é criada com o nome definido. Agora que já temos a gemset criada, podemos utilizá-la com o comando rvm gemset use nome_da_gemset. É possível também trocar para uma gemset específica de uma versão definindo a RVM que se quer utilizar junto da gemset: rvm use 1.9.1@nome_da_gemset.

Para instalar gems dentro dessa versão, basta utilizar gem install nome_da_gem (sem o sudo).

Por padrão, as instalações do ruby dentro do RVM já possuem uma gemset. Para voltar para ela, basta acessar diretamente a sua rvm com rvm use 1.9.1, por exemplo.

Mas, nesse monte de gemsets, como posso saber em qual eu estou e quais eu tenho disponíveis para utilizar? Para o primeiro, existe o comando rvm gemset name.

É possível alterar o script do seu .bash_profile para mostrar o nome da gemset em que você está também, basta adicionar ao script que o próprio RVM sugere, o seguinte comando: (`rvm gemset name`), com isso, ele ficará da seguinte forma:

export PS1='\w `~/.rvm/bin/rvm-prompt i v` (`rvm gemset name`) `git branch 2> /dev/null | grep -e ^* | sed -E s/^\\\\\*\ \(.+\)$/\(\\\\\1\)\ /`\[33[37m\]$\[33[00m\] '

Para listar as gemsets disponíveis, basta executar rvm gemset list e caso não precisa mais de uma gemset, basta executar rvm gemset delete nome_da_gemset.

Por fim, uma outra funcionalidade bastante útil é a criação de arquivos .rvmrc. Esses arquivos funcionam como um script de inicialização da rvm, e podem ser colocados inclusive dentro do diretório do seu projeto, dessa forma, você pode fazer com que quando você acesse o diretório do seu projeto pelo shell da sua máquina ele posicione o seu RVM na versão correta do seu ruby e também na gemset adequada.

Vale a pena dar uma olhada no site oficial para saber mais, tem muitas outras funcionalidades no RVM que podem ajudar bastante no desenvolvimento.

Editado: Existe uma forma mais simples de mostrar a gemset no PS1. Basta adicionar o parâmetro “g” ao rvm-prompt. Dessa forma, ficará:

export PS1='\w `~/.rvm/bin/rvm-prompt i v g` `git branch 2> /dev/null | grep -e ^* | sed -E s/^\\\\\*\ \(.+\)$/\(\\\\\1\)\ /`\[33[37m\]$\[33[00m\] '
Obrigado Nelson Haraguchi por apontar.

Uma estratégia para aprender coisas novas

Uma das formas mais comuns que as pessoas tem de aprender algo novo, por exemplo, uma nova linguagem de programação é através de livros, e testando os códigos para fixar o conhecimento. Essa prática talvez seja a mais usada atualmente, no entanto, para mim não a considero suficiente.

Infelizmente uma das coisas que acabam acontecendo ao praticar os códigos que vêm em determinados livros é um simples copia e cola (apesar de que na maioria dos livros eles dizem para testarmos códigos diferentes, mudarmos o problema etc). Esse copia e cola leva a falsa sensação de que se aprendeu bastante coisa porque por mais que o código funcione, o resultado seja uma interface bonita e funcional, nós não pensamos para escrever aquele código e se você não pensou para escrever, significa que você vai esquecê-lo logo logo.

Recentemente, além de testar códigos de livros, e feito meus próprios exemplos, uma prática que vêm se saindo bastante satisfatória é a de escrever um resumo sobre o assunto (capítulo lido, por exemplo). Acontece que esse resumo, é escrito numa linguagem como se estivesse explicando para outra pessoa o conceito.

A ideia é totalmente inspirada na máxima de que “quando se ensina se aprende duas vezes” e que é verdade. Sempre que se está explicando algo para uma outra pessoa, descobre-se alguma coisa nova e você fixa melhor aquele conhecimento.

Esse resumo não precisa seguir uma linha formal, pode ser feito inclusive em bullet points, por exemplo, abaixo tem um pequeno trecho de quando eu estava aprendendo Flex há algum tempo atrás, e foi quando eu utilizei esse técnica pela primeira vez:

  • Quando trabalhamos com o Flex, já percebemos que podemos escrever tanto MXML quanto ActionScript. Mas, como será que as tags foram definidas? Como elas são executadas?
  • No fundo todas as tags do MXML são componentes ActionScript, são classes ActionScript.
  • Logo, se os componentes lá do MXML são classes, então podemos em algum momento no nosso ActionScript instanciá-las?
  • Ou seja, podemos criar nossos componentes customizados como (como classes Action Script) e utilizá-los no MXML.

É claro que comigo isso funciona e pode não funcionar para outras pessoas, afinal, cada uma possui sua própria forma de aprendizado que acha melhor e mais produtiva.

Mas fica aí como sugestão se você ainda não encontrou sua forma ideal de aprender coisas novas.

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.