Разница между gem и require (требуется open-uri)

Я просто хотел понять для себя.

Я использую гем nokogiri (для разбора HTML). Если я правильно понял, что нужно открывать URL-адреса, мне нужно использовать метод из драгоценного камня «open-uri».

Но когда я включаю его в свой Gemfile (на машине разработчика Windows):

gem 'open-uri' - при установке пакета возникает ошибка, что он не может найти гем.

Итак, если я использую require 'open-uri' - он работает.

Так может кто-нибудь объяснить, что происходит?


person WHITECOLOR    schedule 03.12.2011    source источник


Ответы (2)


Вы используете bundler для ваших зависимостей gem, и вы делаете это правильно, но OpenUri является частью стандартной библиотеки Ruby. Вот почему вам нужно только требовать его, если вы хотите использовать его в своем коде.

person lucapette    schedule 03.12.2011
comment
Спасибо. Где лучше всего использовать «open-uri» в gemfile или где-то еще? - person WHITECOLOR; 03.12.2011
comment
Как правило, вы должны указать его в верхней части файла, в котором вы собираетесь использовать библиотеку. Пожалуйста, примите ответ, если он вам помог. - person lucapette; 03.12.2011
comment
ОСТОРОЖНО: open-uri считается смертельным: sakurity.com/blog/2015/02/ 28/openuri.html - person Simon B.; 14.01.2018

require используется для загрузки другого файла и выполнения всех его инструкций. Это служит для импорта всех определений классов и методов в файл. require также отслеживает, какие файлы ранее требовались, чтобы не выполнять его дважды.

RubyGem — это программный пакет, обычно называемый «драгоценным камнем». Gems содержат упакованное приложение или библиотеку Ruby. Само программное обеспечение RubyGems позволяет вам легко загружать, устанавливать и управлять драгоценными камнями в вашей системе. - Что такое Gem?:

Затем Gemfile используется компоновщиком для установки указанных гемов.

open-uri — это не драгоценный камень, а часть стандартной библиотеки Ruby, поэтому он просто необходим.

person jlundqvist    schedule 03.12.2011
comment
Спасибо. Где лучше всего использовать «open-uri» в gemfile или где-то еще? - person WHITECOLOR; 03.12.2011
comment
Если вы используете его только в одном месте, я бы предложил прямо перед вызовом или, возможно, в начале функции или файла. - person jlundqvist; 03.12.2011
comment
Большое спасибо, я ценю вашу помощь и время! - person WHITECOLOR; 03.12.2011