Gemsets leves com rbenv

Rbenv é uma excelente alternativa leve ao RVM. Se você está trabalhando em projetos pré-Bundler legados, entretanto, você vai querer suporte a gemset, que rbenv não tem.

Existe um plugin rbenv-gemset que funciona muito bem. Infelizmente, eu não gosto disso porque adiciona cerca de 250ms de tempo de execução para todos os comandos Ruby (na minha máquina, pelo menos).

Conjuntos de joias via rbenv-vars

Existe um plugin chamado rbenv-vars que permite definir variáveis ​​de ambiente para cada projeto. Funciona permitindo que você tenha um .rbenv-varsarquivo por projeto que pode se parecer com este:

# .rbenv-vars
PORT
=8000

… e essa variável de ambiente estará disponível para todos os comandos Ruby emitidos para esse projeto.

Vamos usá-lo para definir um caminho de instalação personalizado do Gem para o seu projeto:

# .rbenv-vars
GEM_HOME
=$HOME/.rbenv/gems/myproject
GEM_PATH
=$HOME/.rbenv/gems/myproject

E, claro, vamos criar esse caminho primeiro usando:

$ mkdir -p ~/.rbenv/gems/myproject

Testando

Agora, os comandos Ruby (mais notavelmente gem, ruby) será invocado com esses caminhos gema. Vamos tentar:

$ gem list

**** LOCAL GEMS ****

Seu conjunto de joias agora deve estar puro e vazio.

$ gem environment

RubyGems Environment:
- RUBYGEMS VERSION: 1.8.23
- GEM PATHS:
- /Users/rsc/.rbenv/gems/myproject
....

Ressalvas

Executáveis ​​(como rails) precisarão ser chamados manualmente, por exemplo ~/.rbenv/gems/myproject/bin/rails,.

Se isso incomoda você, as possíveis maneiras de contornar isso são:

  • Sugando e apenas digitando os comandos longos

  • Colocar o caminho da gema dentro do caminho do projeto, ou seja GEM_HOME=./.gemset, e adicionar ./.gemset/binao seu$PATH

  • Criar um pequeno script bash que o adiciona ao seu caminho ( export PATH=$HOME/.rbenv/gems/myproject/bin:$PATH) e invocá-lo sempre que estiver trabalhando naquele projeto