2011-12-03 6 views
25

Solo quería entender por mí mismo.Diferencia entre gema y requiere (requiere abierto-uri)

Estoy usando la gema nokogiri (para analizar HTML). Si lo hice bien para abrir URL, necesito usar un método de la gema 'open-uri'.

Pero cuando lo incluyo en mi Gemfile (en la máquina del desarrollador de Windows):

gem 'open-uri' - hay un error al paquete de instalación que no puede encontrar la gema.

Así que si uso require 'open-uri' - está funcionando.

Entonces, ¿algunos pueden explicar lo que está pasando?

Respuesta

49

Está utilizando bundler para sus dependencias de gemas y lo está haciendo bien, pero OpenUri es parte de la biblioteca estándar de Ruby. Es por eso que solo necesita requerirlo si desea usarlo en su código.

+0

Gracias. ¿Dónde es mejor pedir 'open-uri' en gemfile o en otro lugar? – WHITECOLOR

+2

Generalmente debe solicitarlo en la parte superior del archivo donde va a utilizar la biblioteca. Acepta la respuesta si te ayudó. – lucapette

+1

¡Muchas gracias! – WHITECOLOR

9

require se utiliza para cargar otro archivo y ejecutar todas sus instrucciones. Esto sirve para importar todas las definiciones de clases y métodos en el archivo. require también realiza un seguimiento de los archivos que se han requerido previamente para que no se ejecute dos veces.

A RubyGem es un paquete de software, comúnmente llamado "gema". Las gemas contienen una aplicación o biblioteca Ruby empaquetada. El software RubyGems en sí mismo le permite descargar, instalar y manipular fácilmente gemas en su sistema. - What is a Gem?:

El Gemfile es luego utilizado por bundler para instalar las gemas especificadas.

open-uri no es una joya, sino parte de la Biblioteca estándar de Ruby, por lo que solo necesita ser requerida.

+0

Gracias. ¿Dónde es mejor pedir 'open-uri' en gemfile o en otro lugar? – WHITECOLOR

+1

Si solo lo está usando en un lugar, lo sugeriría justo antes de la llamada o quizás al principio de la función o archivo. – jlundqvist

+0

Muchas gracias, agradezco su ayuda y tiempo! – WHITECOLOR