Hoje estou trabalhando em um projeto interessante, cujo alguns módulos possuem interface gráfica escrita utilizando Rails( e mais umas abstrações num framework interno). Eu já vinha na minha tentativa de praticar o poliglotismo programático a fazer umas pequenas brincadeiras com Rails, utilizando o Ruby padrão, e eis que me deparei com o seguinte cenário: deveria utilizar o JRuby e não o interpretador Ruby padrão. Mas eu queria manter ambos em meu ambiente de desenvolvimento. Pensei comigo mesmo “tal qual o Java vou instalar um novo ‘Jdk’, configurar o JAVA_HOME’ e pronto, posso manter ambas convivendo”, até que alguém me disse: “ai é mais caro”.
Pois é, ao trabalhar com ambos Jruby e Ruby instalados juntos, a gestão dos gems gerava conflitos. Na verdade não eram conflitos, eu simplesmente queria utilizar JRuby, mas os gems instalados iam para o Ruby. A primeira solução, e a mais simples naquele instante, foi colocar no PATH a pasta %JRUBY_HOME%/bin antes de referenciar %RUBY_HOME%/bin , solução análoga a instalações de Banco Oracle que colocavam uma JRE bem antiga como preferencial no PATH. Existia também a solução zero, eliminar o Ruby e manter apenas o JRuby, mas como eu adoro um desafio, resolvi ir à diversão
Não satisfeito que sou, procurei uma solução mais elegante para permitir a dupla convivência de interpretadores diferentes. E eis que existe uma solução: o Ruby Version Manager (RVM) . Resumindo um pouco a ópera, com ele é possível instalar versões diferentes de Ruby, e determinar qual versão específica será utilizada, atualizar um único gem pra uma dada versão, ou pra todas as versões instaladas. Uma coisa muito legal é a possibilidade de testar uma mesma aplicação para várias versões de Ruby instaladas de uma só vez. Para tal o comando é :
rvm tests
Se eu quiser limitar por uma versão específica:
rvm 1.8.6,1.8.7,1.9.1 tests
No meu caso o RVM só tem um probleminha, é pra ambientes Unix, conforme FAQ
Mas o próprio FAQ dá a solução de minha questão, o projeto pik.
O pik atua de forma análoga ao RVM, só que para Windows. A documentação dele é mais pobre, mas não é nada muito diferente do RVM. Para listar os interpretadores disponíveis, é só executar:
pik list
Esse comando trará a lista dos interpretadores, basicamente tal qual o exemplo abaixo:
161: jruby 1.6.1
*187 ruby 1.8.7
indicando que o padrão é o ruby 1.8.7, e não o jruby 1.6.1. Para utilizar o Jruby como padrão, é só executar o comando:
pik use 161.
Desta forma, apenas o JRuby será reconhecido como interpretador. Hoje ainda não tenho a real necessidade de manter essa convivência dupla entre interpretadores(nem demanda pra isso), mas quem disse que temos tempo pra pensar nessas coisas quando um cenário desse aparece?
Pensar sempre à frente pode/poderá ser seu maior trunfo para estes momentos….