Ответ 1
У меня была та же проблема, я исправил ее, добавив следующее вверху рубинового файла
require 'rubygems'
Надеюсь, что поможет
Я пытаюсь получить некоторые камни, работающие на веб-хосте, который поддерживает рубин и некоторые рубиновые драгоценные камни, но не некоторые из тех, которые мне нужно использовать.
Следуя инструкциям, которые я нашел здесь, я сохранил исходное расположение драгоценных камней в своем пути к 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, а не мой путь к директории пользователя.
У меня была та же проблема, я исправил ее, добавив следующее вверху рубинового файла
require 'rubygems'
Надеюсь, что поможет
Мое текущее рабочее (но не идеальное) решение - сделать
Gem.path.push "/path/to/my/gems"
Я говорю менее, чем идеально, потому что это то, что я ожидал от содержимого .gemrc, чтобы сделать для меня автоматически, для всех рубиновых исполнений в моей среде пользователей. Не уверен, почему это не так, но, по крайней мере, работает.
Я предполагаю, что проблема заключается в том, что веб-приложение не использует ту же конфигурацию, что и ваша учетная запись пользователя, вероятно, потому, что она работает как другой пользователь. Один из вариантов - загрузить драгоценные камни в vendor/gems
в вашем приложении.
Вы можете сделать это на своем локальном компьютере с помощью rake gems:unpack
, проверить эти камни в контроле версий и затем развернуть их на сервере. То есть для меня самый надежный подход. Кроме того, вы можете изменить конфигурацию своего приложения, чтобы искать драгоценные камни в своем домашнем каталоге.
Я боролся с этим и решил, что .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
У меня была аналогичная проблема, но принятый ответ здесь, по-видимому, не способ пойти (по крайней мере, это было не для меня). Если это возможно, вы не должны делать это в файлах gem:
require 'rubygems'
Почему бы вам не спросить? Посмотрите на эту статью: http://tomayko.com/writings/require-rubygems-antipattern
В любом случае, вы должны быть в порядке, просто требуя "rubygems" при вызове irb:
> irb -r 'rubygems'
и вы должны иметь тот же результат. Не знаю, почему для этого вопроса этот метод не работает.