У меня установлен жемчуг, но требуется "gemname", не работает. Зачем?

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

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

require 'rubygems'
require 'memcache'

Ответ 1

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

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

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

Ответ 2

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

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

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

ruby -r rubygems script.rb

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

export RUBYOPT=rubygems

(from http://www.rubygems.org/read/chapter/3. Меня заметила переменная окружения Orion Эдвардс)

(Если "require" rubygems "не работает для вас, этот совет имеет ограниченную помощь:)

Ответ 3

Требование должно отображать файл в рубиновом пути. Вы можете узнать, где установлены драгоценные камни, запустив "окружение драгоценных камней" (см. "МОНТАЖНАЯ ДИРЕКТОРИЯ" ):

[email protected]:~$ 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/
[email protected]:~$ 

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

[email protected]:~$ 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>

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

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

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

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

Ответ 7

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

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

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

Ответ 8

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

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

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

Ответ 9

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

Ответ 10

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

require 'dir/subdir/file'

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