У меня установлен драгоценный камень, но требование «имя драгоценного камня» не работает. Почему?

Вопрос, который я действительно задаю, заключается в том, почему require не берет имя драгоценного камня. Кроме того, в случае, если это не так, какой самый простой способ найти секретное заклинание, чтобы потребовать эту чертову штуку!?

Например, если у меня установлен memcache-client, я должен потребовать его с помощью

require 'rubygems'
require 'memcache'

person mloughran    schedule 25.09.2008    source источник


Ответы (11)


Не существует стандарта для того, какой файл вам нужно включить. Однако есть некоторые общепринятые соглашения, которым вы можете следовать и попробовать:

  • Часто файл называют тем же именем, что и гем. Так что require mygem будет работать.
  • Часто файл является единственным файлом .rb в подкаталоге lib драгоценного камня, поэтому, если вы можете получить имя драгоценного камня (возможно, вы перебираете поставщика / драгоценных камней в проекте рельсов до версии 2.1), вы можете проверить #{gemname}/lib для .rb, и если есть только один, это довольно хорошая ставка, которая требуется

Если все это работает, то все, что вы можете сделать, это заглянуть в каталог драгоценного камня (который вы можете найти, запустив gem environment | grep INSTALLATION | awk '{print $4}' и заглянув в каталог lib. Вероятно, вам нужно будет прочитать файлы и надеяться, что есть комментарий, объясняющий, что делать

person Laurie Young    schedule 25.09.2008

Моя система также, похоже, не знает о существовании RubyGems, если только я не скажу ей об этом. Команда «require» перезаписывается RubyGems, поэтому она может загружать драгоценные камни, но если у вас уже нет требуемого RubyGems, она не знает, как это сделать. Итак, если вы пишете свой собственный, вы можете сделать:

require 'rubygems'
require 'gem-name-here'

Если вы запускаете чужой код, вы можете сделать это в командной строке с помощью:

ruby -r rubygems script.rb

Кроме того, есть переменная среды, которую Ruby использует для определения того, что он должен загружать при запуске:

export RUBYOPT=rubygems

(из http://www.rubygems.org/read/chapter/3. На переменную среды мне указал Орион Эдвардс)

(Однако, если «требовать« rubygems »» не работает для вас, этот совет имеет ограниченную помощь :)

person Atiaxi    schedule 27.09.2008

Требование должно сопоставляться с файлом в пути ruby. Вы можете узнать, где установлены драгоценные камни, запустив «среду драгоценных камней» (ищите КАТАЛОГ УСТАНОВКИ):

kburton@hypothesisf:~$ gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 1.2.0
  - RUBY VERSION: 1.8.7 (2008-08-08 patchlevel 71) [i686-linux]
  - INSTALLATION DIRECTORY: /usr/local/ruby/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: /usr/local/ruby/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/local/ruby/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-linux
  - GEM PATHS:
     - /usr/local/ruby/lib/ruby/gems/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://gems.rubyforge.org/
kburton@editconf:~$ 

Затем вы можете найти конкретный файл .rb, который вы пытаетесь запросить. Кроме того, вы можете распечатать содержимое $: from irb, чтобы увидеть список путей, по которым ruby ​​будет искать модули:

kburton@hypothesis:~$ irb
irb(main):001:0> $:
=> ["/usr/local/ruby/lib/ruby/site_ruby/1.8", "/usr/local/ruby/lib/ruby/site_ruby/1.8/i686-linux", "/usr/local/ruby/lib/ruby/site_ruby", "/usr/local/ruby/lib/ruby/vendor_ruby/1.8", "/usr/local/ruby/lib/ruby/vendor_ruby/1.8/i686-linux", "/usr/local/ruby/lib/ruby/vendor_ruby", "/usr/local/ruby/lib/ruby/1.8", "/usr/local/ruby/lib/ruby/1.8/i686-linux", "."]
irb(main):002:0>
person Kyle Burton    schedule 25.09.2008

Кроме того, люди, работающие на рельсах, должны не забывать перезапускать сервер rails после установки драгоценного камня.

person lee penkman    schedule 12.01.2015

Вам нужно включать «rubygems», только если вы установили гем с помощью gem . В противном случае секретным заклинанием было бы запустить irb и попробовать разные комбинации. Кроме того, вы можете передать параметр -I интерпретатору ruby, чтобы включить каталог установки драгоценного камня в LOAD_PATH. Обратите внимание, что $LOAD_PATH — это массив, что означает, что вы можете добавлять в него каталоги из своего скрипта.

person Vhaerun    schedule 25.09.2008

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

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

Кроме того, в случае, если это не так, какой самый простой способ найти секретное заклинание, чтобы потребовать эту чертову штуку!?

Читать документацию по вашему драгоценному камню?
Я обнаружил, что при поиске в Google rdoc gemname обычно можно найти официальные rdocs для вашего драгоценного камня, которые обычно показывают вам, как его использовать.

Memcache, возможно, не лучший пример, так как они предполагают, что вы будете использовать его с рельсов, и «require» уже будет сделано за вас, но большинство других, которые я видел, имеют примеры, которые показывают правильное «require». заклинания

person Orion Edwards    schedule 25.09.2008

У меня была эта проблема, потому что я использую rvm и пытался использовать неправильную версию ruby. Для рассматриваемого драгоценного камня требовалось 1.9.2, и я установил 2.0.0 по умолчанию! Возможно, это глупая ошибка, но ее, вероятно, сделал кто-то другой, зашедший на эту страницу.

person Dreyfuzz    schedule 08.05.2014

Проблема, с которой я только что столкнулся, заключалась в том, что фактический встроенный гем не включал все файлы, которые он должен иметь.

Проблема с files заключалась в том, что в gemspec была синтаксическая ошибка, но во время сборки ошибок не возникало.

Просто добавьте это здесь, если кто-то еще столкнется с той же проблемой.

person Gerry    schedule 27.04.2015

Это также может быть несоответствие имени драгоценного камня:

например dummy-spi-0.1.1/lib/spi.rb нужно назвать dummy-spi-0.1.1/lib/dummy-spi.rb

тогда ты можешь

require 'dummy-spi'
person Hahn    schedule 10.06.2020

У меня тоже была эта проблема после установки OS X Lion, и я обнаружил, что даже если я запущу следующий код, я все равно получу предупреждающее сообщение. require 'rubygems' require 'nokogiri'

Я перепробовал множество решений, размещенных здесь и в Интернете, но, в конце концов, мое обходное решение заключалось в том, чтобы просто следовать инструкциям на http://martinisoftware.com/2009/07/31/nokogiri-on-leopard.html для переустановки LibXML и LibXSLT из исходного кода, но с обеспечением версии LibXML I. установленный совпал с тем, который ожидал Nokogiri.

Как только я это сделал, предупреждения исчезли.

person Matthew O'Riordan    schedule 01.08.2011

Посмотрите источник драгоценного камня и проверьте каталог lib. Если файла rb нет, то вы должны указать основной rb файл gem в подкаталоге:

require 'dir/subdir/file'

для /lib/dir/subdir/file.rb.

person hlcs    schedule 08.10.2016