Ruby gem перечислен, но не загружайте (драгоценный камень в пользовательский каталог, а не рубиновый каталог)

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

Следуя инструкциям, которые я нашел здесь, я сохранил исходное расположение драгоценных камней в своем пути к gem и добавил свои собственные в /path/to/my/home/gems на ~/.gemrc

gemhome: /users/home/myuser/gems
gempath:
- /usr/local/lib/ruby/gems/1.8
- /users/home/mysuser/gems

Я загрузил некоторые драгоценные камни вручную и установил с помощью опций -local и -install-dir команды gem. Затем я сделал "список драгоценных камней" и на самом деле вижу драгоценности, которые я установил в своем каталоге пользователя, а также оригинальные драгоценные камни в обычном системном пути.

Если я нахожусь на IRB или рубине -e, все системные драгоценные камни работают нормально. Тем не менее, я не могу получить загруженные загруженные gem файлы моего каталога:

$ ruby -r rubygems -e "require 'nokogiri'"
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require__': no such file to load -- nokogiri (LoadError)
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require'
    from -e:1

Я даже попробовал старую школу require_gem:

$ irb -r rubygems
irb(main):001:0> require_gem 'nokogiri'
Gem::LoadError: Could not find RubyGem nokogiri (> 0.0.0)

    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:204:in `report_activate_error'
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:141:in `activate'
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:37:in `require_gem_with_options'
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:31:in `require_gem'
    from (irb):1

Из моего "списка драгоценных камней" я вижу:

nokogiri (1.3.3)
Nokogiri is an HTML, XML, SAX, and Reader parser

У меня есть эта же проблема со всеми установками gem. Что мне здесь не хватает?

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

ИЗМЕНИТЬ: По предложению Рейфа я посмотрел на Gem.path из IRB. В нем перечислены только системный путь gem,/usr/local/lib/ruby/gems/1.8, а не мой путь к директории пользователя.

Ответы

Ответ 1

У меня была та же проблема, я исправил ее, добавив следующее вверху рубинового файла

require 'rubygems'

Надеюсь, что поможет

Ответ 2

Мое текущее рабочее (но не идеальное) решение - сделать

Gem.path.push "/path/to/my/gems"

Я говорю менее, чем идеально, потому что это то, что я ожидал от содержимого .gemrc, чтобы сделать для меня автоматически, для всех рубиновых исполнений в моей среде пользователей. Не уверен, почему это не так, но, по крайней мере, работает.

Ответ 3

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

Вы можете сделать это на своем локальном компьютере с помощью rake gems:unpack, проверить эти камни в контроле версий и затем развернуть их на сервере. То есть для меня самый надежный подход. Кроме того, вы можете изменить конфигурацию своего приложения, чтобы искать драгоценные камни в своем домашнем каталоге.

Ответ 4

Я боролся с этим и решил, что .gemrc не загружается во всех случаях. Например, он соблюдается при установке драгоценных камней, но не обязательно при запуске irb или script/console.

Я также обнаружил, что этот путь к локальному каталогу должен отличаться от того, что я видел на многих сайтах. Для меня работает следующее:

---
gem: --no-ri --no-rdoc
gemhome: /home/.gem/ruby/1.8
gempath: 
- /home/.gem/ruby/1.8
- /usr/lib/ruby/gems/1.8

Ответ 5

У меня была аналогичная проблема, но принятый ответ здесь, по-видимому, не способ пойти (по крайней мере, это было не для меня). Если это возможно, вы не должны делать это в файлах gem:

require 'rubygems'

Почему бы вам не спросить? Посмотрите на эту статью: http://tomayko.com/writings/require-rubygems-antipattern

В любом случае, вы должны быть в порядке, просто требуя "rubygems" при вызове irb:

> irb -r 'rubygems'

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