Configurando PATH do RubyGems e Bundler no Linux

Leia isto "em cerca de 10 minutos".

Introdução

Nesse tutorial será realizado uma série de abstrações das estrutura de pasta do RubyGems e do Bundler no ato de uma instalação de gem. Para isso, é importante que você faça o backup de gems instaladas na pasta ~/.gem, pois a mesma será altamente altera e removida. Também da pasta ~/bin (caso ela existir) e dos arquivos ~/.gemrc e ~/.bundle/config.

Limpando no ambiente de trabalho

Vamos limpar tudo que está realacionado no diretório onde as gems são instaladas e suas configurações com o comando abaixo:

1 $ rm -rf ~/.gem ~/.bundle ~/.gemrc

Requerimentos

RequeridoVersãoComo verificarComo instalar
Fedora27lsb_release -a | grep ReleaseFedora Download
Ruby2.4.3p205ruby -vRuby
Gem2.6.14gem -vRuby contém Gem

Nota: Foi usado a distribuição Linux Fedora 27, mas a configuração pode ser compatível com outras distribuições também.

RubyGems

RubyGems é um gerenciador de pacotes do Ruby, e para utiliza-lo você precisa instalar o Ruby que já contém o mesmo. Para instalar o Ruby no Linux e o gerenciador de pacotes RubyGems, você pode olhar a pŕópria documentação do Ruby AQUI, instalando de acordo com sua distribuição. RubyGems é responsável por instalar/gerenciar Gems (bibliotecas ou programas) em nossa máquina que servirão de base (ou não) para projetos em que criamos ou projetos que utilizamos.

Quando instalamos as Gems através do gerenciador gem, as mesmas são instaladas no diretório do usuário, caso precise mudar o algo onde será intalado, precisa configurar o reconhecimento de PATH (variáveis de ambiente), que é feito através do arquivo ~/.bashrc. Também necessita criar um arquivo de configuração do “Gem Environment”, o ~/.gemrc.

Diretórios padrão do RubyGems

Vamos entender a arquitetura de pastas das gems instalados com o gerenciador do RubyGems, para isso, vamos instalar a próprio bundler que mais para frente vamos configurar.

NOTA: Dependendo da versão do ruby que você estiver usando, esses comportamento de pastas não serão igual a desse tutorial. Aqui está sendo utilizado a versão 2.4.3 do Ruby, porém, mesmo assim pode usar esse tutorial para ter uma noção de configuração.

1 $ gem install bundler

A estrutura de pastas padrão criada foi a seguinte:

 1 william
 2 ├── bin
 3 │   ├── bundle
 4 │   └── bundler
 5 └── .gem
 6      ├── ruby
 7      │   ├── build_info
 8      │   ├── cache
 9      │   ├── doc
10      │   ├── extensions
11      │   ├── gems
12      │   └── specifications
13      └── specs  

  

Repare que a gem bundler é instalado no diretório ~/.gem, o que é conformidável, porém, algo que fica um pouco incomodo, é a criação da pasta bin na raiz do usuário para armazenar os executaveis das gems. Isso é realmente incomodativo, pois o diretório ~/bin por ser usado para outros eventuais executáveis, como por exemplo, executáveis shell.

Não queremos essa estrutura! Então vamos desinstalar a gem bundler e remover a estrutura de pastas onde foi instalado a gem:

Note: Digite “Y” quando pedir para desinstalar o bundler.

1 $ gem uninstall bundler
2 $ rm -rf ~/.gem ~/bin

Variáveis de ambiente para RubyGems

Após ter a noção de estrutura de pastas padrão do “Gem Environment”, vamos configurar nossas variáveis de ambiente no arquivo ~/.bashrc para adiante mudarmos o local onde é instalado nossas gems.

Abra ~/.bashrc com um editor de sua preferência, coloca as seguintes variáveis de ambiente abaixo e salve-o:

1 # RubyGems environment variables
2 GEM_PATH="$(ruby -rubygems -e 'puts Gem.user_dir')"
3 GEM_HOME="$GEM_PATH"
4 GEM_BIN="$GEM_PATH/bin"
5 export PATH="$GEM_PATH:$GEM_HOME:$GEM_BIN:$PATH"

Na linha 1, está sendo definido o PATH das gems, que no caso é: /home/USER/.gem/ruby Na linha 2, está sendo definido o diretório HOME das gems, que nã verdade é o mesmo do $GEM_PATH. Na linha 3, é definido o PATH de onde irá ficar os executaveis de algumas gems, no caso é: /home/USER/.gem/ruby/bin Na linha 4, é responsável por exportar essas configurações para o bash reconhecer os PATHS.

Feito isso, execute o comando abaixo para as altereções entrarem em vigor.

1 source ~/.bashrc

Pronto, foi criado as variáveis de ambiente necessárias para o ambiente do RubyGems, porém, repare que a minha pasta bin na variável $GEM_BIN, está apontando para um diretório que não é onde os executáveis das gems são instalados por padrão.

Configuração do Environment do RubyGems

Para forçar os executáveis das gems, a serem instalados na nova configuração das variáveis de ambientes, necessita criar o arquivo “~/.gemrc” na raiz do usuário que modificará o “Gem Environment” do RubyGems. Para isso faça no terminal:

 1 cat << EOF > ~/.gemrc
 2 ---
 3 gem:
 4   --bindir $GEM_BIN
 5   --no-ri --no-rdoc
 6 gemhome: $GEM_HOME
 7 gempath:
 8 - $GEM_PATH
 9 :benchmark: false
10 :update_sources: true
11 :verbose: true
12 :backtrace: false
13 :sources:
14 - http://gems.rubyforge.org/
15 - http://rubygems.org/
16 :bulk_threshold: 1000
17 EOF

O –bindir será o cara responsável por mudar o diretório dos executáveis das gems de “~/bin” para o valor que está na variáveis de ambiente $GEM_BIN, ou seja, o diretório será: “/home/USER/.gem/ruby/bin”. O $GEM_PATH e $GEM_HOME vão ter o mesmo valor da configuração padrão “Gem Environment” do RubyGems.

Com o novo ambiente RubyGems configurado, vamos instalar novamente o bundler:

1 $ gem install bundler

Agora, dê o seguinte comando abaixo, e verás que os executáveis do bundler estão no diretório que foi configurado na variável de ambiente $GEM_BIN, e não mais no diretório ~/bin:

1 $ ls $GEM_BIN

Agora, você tem um ambiente do RubyGems configurado com uma estrutura de pasta um pouco mais organizada.

Para saber mais o que cada linha do arquivo “~/.gemrc” faz, dê uma olhada na documentação da própria RubyGems.

Bundler

O Bundler também é um gerenciador de Gems e trabalha junto com o RubyGems, porém de uma forma mais conjulgal, isso porque ele utiliza um arquivo chamado Gemfile para alocar todas Gems que necessitamos em nossos projetos, assim, não precisamos instalar Gems uma à uma com o gerenciador RubyGems.

A instalação das gems através do bundler com Gemfile, também jogará os executáveis das gems para o diretório ~/bin. Então se pergunta: Mas eu configurei meu “Gem Environment” tracando a estrutura de pastas onde são instaladas, por que o Bundler não obedece essa configuração?

R:- Assim como o RubyGems, também é necessário configurar o PATH para o Bundler no ~/.bashrc e no próprio arquivo de configuração contido no diretório raiz do usuário, o ~/.bundle/config. Esse arquivo de configuração do Bundler é global, ou seja, todas as Gems instaladas com o Bundler, serão instaladas no diretório de acordo com que está no arquivo ~/.bundle/config, a menos que, o seu projeto contenha um arquivo de configuração local. Exemplo: myproject/.bundle/config. Nesse caso as Gems seriam instaladas no local do projeto.

Diretórios padrão do Bundler

Vamos entender melhor a estrutura de pastas criadas pelo Bundler quando instalamos GEMS com o arquivo Gemfile:

 1 william
 2 ├── bin
 3 │   ├── sass
 4 │   ├── sass-convert
 5 │   └── scss
 6 └── .gem
 7      ├── ruby
 8      │   ├── bin
 9      │   ├── build_info
10      │   ├── cache
11      │   ├── doc
12      │   ├── extensions
13      │   ├── gems
14      │   ├── ruby
15      │   │   └── 2.4.0
16      │   │        ├── bin
17      │   │        ├── build_info
18      │   │        ├── cache   
19      │   │        ├── doc   
20      │   │        ├── extensions   
21      │   │        ├── gems                           
22      │   │        └── specifications       
23      │   └── specifications
24      └── specs  

 

Nesse caso, foi instalado o Sass com um arquivo Gemfile, e repare o Bundler criou uma pasta ruby dentro da pasta ruby do RubyGems, contendo uma subpasta com nome de 2.4.0 que é a versão atual do Ruby que está sendo usada.

Variáveis de ambiente do Bundler

Vamos configurar as variáveis de ambiente para Bundler. No arquivo ~/.bashrc adicione as seguintes variáveis e salve-o:

1 # Bundler environment variables
2 BUNDLE_PATH="$HOME/.gem/bundle"
3 BUNDLE_HOME="$BUNDLE_PATH"
4 BUNDLE_BIN="$BUNDLE_HOME/bin"
5 export PATH="$BUNDLE_PATH:$BUNDLE_HOME:$BUNDLE_BIN:$PATH"

Feito isso, execute o comando abaixo para as altereções entrarem em vigor.

1 source ~/.bashrc

Configuração do Environment do Bundler

Dê os comandos abaixo, para criar o arquivo ~/.bundle/config. Esse arquivo é as configurações global do Bundler.

1 $ bundle config --global PATH $BUNDLE_PATH
2 $ bundle config --global BIN $BUNDLE_BIN
3 $ bundle config --global DISABLE_SHARED_GEMS true

Na linha 1 atribuimos o PATH o local raiz onde nossas Gems global irá ser instaladas.
Na linha 2 atribuimos o PATH para os executáveis das Gems.
Na linha 3 é opcional, onde desabilitamos o compartilhamento de Gems.

Para ver mais detalhes sobre como está as configurações do Gem Environment na sua máquina, você pode executar o comando abaixo:

1 $ gem env

Conclusão

Apenas compartilhei algo básico de como configurar o RubyGems e Bundler. Existe muito mais na documentação de ambos, o que pode lhe servir o que deseja:

Finalizo por aqui, espero que estas linhas de alguma forma lhe sirva de ajuda. Obrigado por ler. Fica com um sonzinho abaixo. :)

A Palavra:

"A pessoa que aceita e obedece aos meus mandamentos prova que me ama. E a pessoa que me ama será amado pelo meu Pai, e eu também a amarei e lhe mostrarei quem sou."
(João 14:21 NTLH)