У меня есть драгоценный камень установлен, но требуют "gemname" не работает. Зачем?


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

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

require 'rubygems'
require 'memcache'
10 58

10 ответов:

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

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

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

моя система также, кажется, не знает о существовании 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. переменная окружения была указана мне Орион Эдвардс)

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

требование должно сопоставляться с файлом в пути ruby. Вы можете узнать, где установлены драгоценные камни, запустив "gem environment" (найдите каталог установки):

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>

также рельсы люди должны помнить, чтобы перезагрузите сервер rails после установки gem

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

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

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

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

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

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

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

вопрос с files было то, что была синтаксическая ошибка в gemspec, но никаких ошибок не было брошено во время сборки.

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

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

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

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

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

смотреть источник драгоценного камня и проверить