У меня установлен драгоценный камень, но требование 'gemname' не работает Зачем? - PullRequest
59 голосов
/ 25 сентября 2008

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

В качестве примера, если у меня установлена ​​memcache-client, то мне нужно потребовать его, используя

require 'rubygems'
require 'memcache'

Ответы [ 10 ]

47 голосов
/ 28 сентября 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 "не работает для вас, однако, этот совет имеет ограниченную помощь:)

38 голосов
/ 25 сентября 2008

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

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

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

10 голосов
/ 25 сентября 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>
8 голосов
/ 12 января 2015

Также пользователи rails должны помнить перезапустить сервер rails после установки гема

3 голосов
/ 25 сентября 2008

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

2 голосов
/ 26 сентября 2008

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

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

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

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

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

1 голос
/ 27 апреля 2015

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

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

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

0 голосов
/ 08 октября 2016

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

require 'dir/subdir/file'

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

0 голосов
/ 08 мая 2014

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

0 голосов
/ 01 августа 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...