Требуется библиотека возвращает сообщение «отсутствует файл» - PullRequest
2 голосов
/ 07 октября 2009

У меня есть небольшое приложение, которое я создал с помощью ювелира. Ювелир генерирует каталог lib /, в который, как я полагаю, я напишу свой код.

Этот драгоценный камень, который я создаю, зависит от камня httparty, поэтому в моем Rakefile я поместил

  Jeweler::Tasks.new do |gem|
    gem.add_dependency('httparty', '>= 0.4.5')
    ...
  end

в моем файле реализации я положил

require 'httparty'

но когда я выполняю его, я получаю:

lib / my_app.rb: 1: в `require ': такой файл не загружается - httparty (LoadError)

Я уже установил гем httparty с помощью

sudo gem install httparty

Чего не хватает?

Ответы [ 6 ]

8 голосов
/ 07 октября 2009

Прежде чем требовать какой-либо драгоценный камень, вам нужно потребовать рубины

require 'rubygems'
require 'httparty'
1 голос
/ 07 октября 2009

Если вы делаете

require "httparty"

ruby ​​ищет в разных местах httparty.rb или httparty.so. Где ищет ruby ​​и в каком порядке хранится в глобальной переменной $:

В моей системе Debian это выглядит так:

$: # =>  ["/usr/local/lib/site_ruby/1.8", "/usr/local/lib/site_ruby/1.8/x86_64-linux", "/usr/local/lib/site_ruby", "/usr/lib/ruby/vendor_ruby/1.8", "/usr/lib/ruby/vendor_ruby/1.8/x86_64-linux", "/usr/lib/ruby/vendor_ruby", "/usr/lib/ruby/1.8", "/usr/lib/ruby/1.8/x86_64-linux", "."]

Но httparty.rb находится в /var/lib/gems/1.8/gems/httparty-0.4.5/lib/httparty.rb, поэтому его нельзя найти. Когда вы делаете

require "rubygems"

Изменен метод Kernel # require для поиска рубинов.

require "rubygems" делает вашу кодовую платформу зависимой:

  • Кто-то может установить вашу библиотеку другим способом, чем rubygems
  • В некоторых дистрибутивах Linux (например, Gentoo) нет необходимости требовать "rubygems"

В моих системах Debian я символически связываю каждую библиотеку rubygems с /usr/local/lib/site_ruby/1.8/, этот путь включен в стандартный путь поиска ($ :). Вы можете найти больше об этом в http://tomayko.com/writings/require-rubygems-antipattern.

1 голос
/ 07 октября 2009

Тебе нужны рубины

require 'rubygems'

, прежде чем вам потребуется httparty

0 голосов
/ 14 февраля 2013

Эта ошибка может возникать, когда вы пытаетесь создать http-сообщения с помощью Ruby, но не завершили настройку Rubygems и RVM.

  1. Сначала убедитесь, что rubygems и rubygems-update установлены правильно, используя учебное руководство здесь: http://docs.rubygems.org/read/chapter/3

  2. Если вы используете RVM, вам также необходимо создать набор гемов и сначала выбрать версию ruby.

Список наборов $ rvm

Если это показывает, что вы включены (по умолчанию), то вам нужно будет настроить RVM.

Найдите нужную версию ruby ​​($ ruby ​​-v) и замените ее здесь:

$ rvm use 1.9.2-head@albinochipmunk --create

  1. После того, как ваши rubygems установлены и у вашего RVM есть выбранная версия gemset и ruby, вы сможете установить httparty без sudo:

$ gem install httparty

Установка httparty с помощью sudo может нарушить настройку RVM, поэтому вам следует избегать этого. Кроме того, использование нового набора гемов RVM будет означать, что вам может потребоваться переустановить некоторые гемы.

0 голосов
/ 25 апреля 2012

У меня была такая же проблема со строкой:

gem "httparty", :git => 'https://github.com/jnunemaker/httparty.git'

Когда я перехожу к:

gem "httparty"

все заработало.

0 голосов
/ 07 октября 2009

Некоторые люди не считают хорошей практикой требовать рубинов в распространяемом коде. Решение заключается в require rubygems перед загрузкой вашего нового драгоценного камня из кода вашего приложения. (тебе все равно придется это сделать)

...