ti-enxame.com

Diferença entre gem e exigir (requer uri aberto)

Eu só queria entender por mim mesmo.

Estou usando a gema nokogiri (para analisar HTML). Se eu consegui abrir URLs corretamente, preciso usar um método da gema 'open-uri'.

Mas quando eu o incluo no meu Gemfile (na máquina do desenvolvedor de Windows):

gem 'open-uri' - há um erro ao instalar o pacote que não consegue encontrar a jóia.

Então, se eu usar require 'open-uri' - está funcionando.

Então, alguns podem explicar o que está acontecendo?

28
WHITECOLOR

Você está usando bundler para suas dependências de gemas e está fazendo certo, mas OpenUri faz parte da biblioteca padrão Ruby. Isso é por que você somente precisa solicitá-lo se deseja usá-lo em seu código.

55
lucapette

require é usado para carregar outro arquivo e executar todas as suas instruções. Isso serve para importar todas as definições de classe e método no arquivo. require também controla quais arquivos foram solicitados anteriormente, para que não sejam executados duas vezes.

Um RubyGem é um pacote de software, comumente chamado de "jóia". As gemas contêm um pacote Ruby. O próprio software RubyGems permite que você baixe, instale e manipule gemas com facilidade em seu sistema. - O que é uma gema? :

O Gemfile é então usado por bundler para instalar as gemas especificadas.

o open-uri não é uma jóia, mas faz parte da Biblioteca Padrão Ruby Standard, portanto, só precisa ser necessário.

9
jlundqvist