bundler vs RVM vs gems vs RubyGems vs gemsets vs sistema ruby ​​[fechado]


102

Eu sou novo em Ruby e estou tentando entender os seguintes conceitos: bundler vs RVM vs gems vs RubyGems vs conjuntos de gemas vs sistema de esfregar e estou confuso.

Alguém pode descrever uma 'melhor prática' de como devo gerenciar tudo isso em uma nova instalação da versão mais recente do Ubuntu? O que devo instalar e como devo usar tudo isso?

Acho que fazer um sudo apt-get install rubynão é recomendado, mas não tenho certeza. Eu tentei no meu sistema além de 'todas as outras coisas do Ruby'. Só está aumentando minha confusão. Não estou falando sobre Rails, mas apenas joias comuns de Ruby (por exemplo, Vagrant, Chef, scripts).

Respostas:


184

De acordo com a resposta anterior, isso é muito para cobrir, portanto, considere esta uma breve introdução.

gems são a forma como as bibliotecas Ruby são empacotadas. Eles são para Ruby o que os jars são para Java. Dentro de um arquivo gem, você encontra o código Ruby (arquivos .rb), mas também testes, e um arquivo especial que fornece informações sobre a gem em si, como seu nome, dependências e versão ( gemspec ). Qualquer projeto Ruby pode definir as joias de que precisa por meio de um Gemfile que só precisa declarar dependências. Rubygems é o nome do gerenciador de pacotes - a ferramenta usada para instalar os pacotes (enquanto as gems são os próprios pacotes). Rubygems agora faz parte do Ruby.

Bundler é o que torna o gerenciamento de joias suportável. Com base em seu Gemfile, uma simples chamada para bundler usando bundle install irá baixar e instalar todas as joias necessárias. Usando o comando gem padrão, você teria que instalar cada um deles manualmente, usandogem install <gem_name>. Bundler não faz parte do Ruby (ele mesmo é empacotado como uma joia ), mas é um "padrão de fato" para a maioria dos aplicativos (você não encontrará muitas pessoas que não o usem, e não há boas razões para não usá-lo, na verdade).

RVM é uma ferramenta que permite instalar várias versões de Ruby em uma máquina, alternando entre elas quando necessário. Isso pode ser usado para instalar um Ruby 1.8 e 1.9, ou mesmo um "MRI" (Ruby de Matz, a implementação padrão) e alternativas (como JRuby ou Rubinius). Observe que o RVM não está sozinho neste campo, consulte, por exemplo, rbenv .

Um conjunto de joias no RVM é um conjunto de joias específicas para um determinado contexto, normalmente um projeto. Isso é útil se você estiver, por exemplo, desenvolvendo aplicativos diferentes, cada um com seus próprios conjuntos de joias, e quiser mantê-los separados.

O sistema Ruby é, ao usar RVM, a versão Ruby instalada na máquina (ou seja, não via RVM).

Se você está apenas começando, as gemas e o bundler são do seu interesse. Você pode deixar RVM e gemsets de lado por enquanto.


1
Boa resposta, você poderia esclarecer: Qual é a diferença entre gems e RubyGems? E entre gemspec e Gemfile? Além disso, quais desses programas (por exemplo, bundler) listados acima estão incluídos com 'Ruby' e quais são aplicativos separados (acredito que o RVM é separado)? E o gemset é apenas um conceito apenas no RVM ou no núcleo do Ruby também (ou outras coisas, como o rbenv mencionado na outra resposta)? E se o bundler torna o gerenciamento de gemas mais fácil, qual era a maneira pré-bundler de fazer isso? (ou seja, como você gerenciaria gemas sem empacotador, só para eu saber, mesmo se eu nunca fizesse dessa forma.) Obrigado!
user779159

Então Rubygems é o nome do gerenciador de pacotes, que você invoca com o comando 'gem'? E o bundler também faz parte do próprio Ruby, assim como o Rubygems, ou preciso incluí-lo de alguma forma?
user779159

2
"Se você está apenas começando ... [você] pode deixar o RVM ... de lado por enquanto." A menos que você esteja no OS X, e o projeto Ruby que deseja instalar e executar depende de uma versão do Ruby posterior à que vem pré-instalada no sistema operacional. Então você vai precisar do RVM.
Hefesto

Isso não é verdade: "Usando o comando gem padrão, você teria que instalar cada um deles manualmente." Você pode definitivamente instalar todas as gemas em seu gemfile usando um único comando "gem install"
Andy

1

Você está pedindo mais informações em uma pergunta do que está no escopo para Stack Overflow. Para cobrir tudo isso seria necessário um livro.

No Ubuntu é fácil instalar e remover joias da versão de "sistema" do Ruby, então se acostume a instalar e remover joias regulares via sudo. (No Mac OS eu daria um conselho diferente porque a Apple empacota Ruby para seu próprio uso e não é uma boa ideia mexer com ele.) Então, quando você tiver uma ideia de como toda a ideia de joia funciona, e você sabe que quer múltiplos Versões Ruby em seu sistema, tente " rbenv " ou " RVM " e instale uma ou duas versões em sua sandbox.

O Linux torna mais fácil adicionar / remover Ruby por meio de uma distribuição, mas estamos limitados às versões que os mantenedores da distro empacotaram, então geralmente instalo a partir do código-fonte. Mas, isso é uma dor ao gerenciar várias versões de Ruby para sistemas de desenvolvimento, teste e produção, e é por isso que rbenv e RVM foram inventados - eles lidam com os detalhes sujos, permitindo que nos concentremos na programação.

Eu usei o rbenv e o RVM , e tenho usado o rbenv nos últimos seis meses ou mais, com bons resultados. É menos complicado do que RVM, de que gosto. Em ambos os casos, eles facilitam a instalação de diferentes versões, com conjuntos separados de joias. Você pode ter diferentes versões de Ruby abertas em diferentes janelas de terminal se desejar, facilitando o teste de compatibilidade.

A regra um ao depurar é fazer as alterações uma de cada vez, o que é verdadeiro para aprender a programar ou aprender um novo idioma. Não se distraia, apenas mantenha as coisas simples.


1
Nunca faça sudo em qualquer gerenciador de pacotes diferente do gerenciador de pacotes do sistema padrão (por exemplo, apt ou apt-get). Você inevitavelmente bagunçará seu sistema.
imagem
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.