Драгоценный камень найден в IRB, а не в Ruby - PullRequest
4 голосов
/ 31 мая 2011

У меня установлено несколько драгоценных камней, и я пытаюсь использовать их в приложении на Ruby:

require 'rubygems'
require 'mygem'

Когда я запускаю приложение, я получаю эту ошибку: <internal:lib/rubygems/custom_require>:29:in require ': такой файл не загружается - mygem (LoadError) `

Но если я попытаюсь потребовать драгоценный камень внутри irb (сначала убедитесь, что он "требует" rubygems), он будет работать нормально. Что я должен сделать? Я пытался найти эту проблему, но не понял.

Выполнение which на ruby, gem и irb показывает, что они все в /opt/local/bin/, т.е.

> which ruby
/opt/local/bin/ruby
> which gem
/opt/local/bin/gem
> which irb
/opt/local/bin/irb

Обновление для ответа на поставленные вопросы (yep, irb и ruby ​​указывают на разные папки):

$LOAD_PATH и $: в irb оба содержат указатель на папки ruby ​​1.8:

/opt/local/lib/ruby/site_ruby/1.8
/opt/local/lib/ruby/site_ruby/1.8/i686-darwin10
/opt/local/lib/ruby/site_ruby
/opt/local/lib/ruby/vendor_ruby/1.8
/opt/local/lib/ruby/vendor_ruby/1.8/i686-darwin10
/opt/local/lib/ruby/vendor_ruby
/opt/local/lib/ruby/1.8
/opt/local/lib/ruby/1.8/i686-darwin10
.

$: в рубинах указывает на папки ruby ​​1.9.1:

/usr/local/lib/ruby/site_ruby/1.9.1
/usr/local/lib/ruby/site_ruby/1.9.1/i386-darwin9.8.0
/usr/local/lib/ruby/site_ruby
/usr/local/lib/ruby/vendor_ruby/1.9.1
/usr/local/lib/ruby/vendor_ruby/1.9.1/i386-darwin9.8.0
/usr/local/lib/ruby/vendor_ruby
/usr/local/lib/ruby/1.9.1
/usr/local/lib/ruby/1.9.1/i386-darwin9.8.0

gem env показывает

RubyGems Environment:
  - RUBYGEMS VERSION: 1.4.1
  - RUBY VERSION: 1.8.7 (2010-12-23 patchlevel 330) [i686-darwin10]
  - INSTALLATION DIRECTORY: /opt/local/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: /opt/local/bin/ruby
  - EXECUTABLE DIRECTORY: /opt/local/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-darwin-10
  - GEM PATHS:
     - /opt/local/lib/ruby/gems/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
     - "gempath" => ["/opt/local/lib/ruby/gems/1.8"]
     - :sources => ["http://rubygems.org/", "http://gems.github.com", "http://gems.github.com"]
  - REMOTE SOURCES:
     - http://rubygems.org/
     - http://gems.github.com
     - http://gems.github.com

Gem.path в irb указывает на

/Users/grautur/.gem/ruby/1.8
/usr/local/lib/ruby/gems/1.8

Gem.path в рубинах указывает на

/Users/grautur/.gem/ruby/1.9.1
/usr/local/lib/ruby/gems/1.9.1

Ответы [ 4 ]

2 голосов
/ 31 мая 2011

Я не уверен, что происходит. Однако может помочь следующее.

В irb, сделайте

require 'rubygems'
require 'mygem'
puts $:

и затем в ruby ​​выполните

require 'rubygems'
puts $:

и покажите нам, что вы получите, если вы еще не решили.

Редактировать: также распечатать результаты выполнения gem env в командной строке.

Редактировать 2: Посмотрите, что произойдет, если вы введете puts Gem.path после того, как вам потребуются рубины как в irb, так и в ruby. См. спасибо Мэтту за описание Rubygems

1 голос
/ 26 марта 2015

Вам нужно будет добавить gem install mygem в ваш Gamefile и затем запустить команду bundle install. После этого ваше приложение будет работать правильно.

1 голос
/ 31 мая 2011

Вы можете попытаться добавить gem 'mygem' перед запросом, но в этом нет необходимости.

0 голосов
/ 29 июня 2011

У меня было аналогичная проблема . В итоге я нашел решение настроить rvm (менеджер версий ruby) на моей системе и использовать его для настройки новой среды ruby. это также облегчает переключение между рубиновыми версиями наборов драгоценных камней.

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