2011-05-30 1 views
4

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

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 

Update, чтобы ответить на поставленные вопросы (да, IRB и рубин указывают на разные папки) :

$LOAD_PATH и $: в IRB и содержат, кажется, указывая на рубин 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 
. 

$: в рубиновых указывает на рубин 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 
+0

В чем содержатся переменные '$ LOAD_PATH' или' $: '? Изучение тех, кто в каждой среде, вероятно, будет достаточно информативным. –

+0

Хмм, irb, похоже, использует ruby ​​1.8 ('$ LOAD_PATH' и' $: 'оба: /opt/local/lib/ruby/site_ruby/1.8,/opt/local/lib/ruby/site_ruby/1.8/i686- darwin10,/Opt/местные/Библиотека/рубин/site_ruby,/Opt/местные/Библиотека/рубин/vendor_ruby/1,8,/Opt/местные/Библиотека/рубин/vendor_ruby/1,8/i686-darwin10,/Opt/местные/Библиотека/ruby/vendor_ruby,/opt/local/lib/ruby ​​/ 1.8,/opt/local/lib/ruby ​​/ 1.8/i686-darwin10 ,.), в то время как ruby ​​использует ruby ​​1.9.1 ('$ LOAD_PATH' пуст,' $: '- версии 1.9.1 предыдущих путей). – grautur

ответ

1

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

+0

Я пробовал это, но ничего не менял. – grautur

2

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

В IRB, делают

require 'rubygems' 
require 'mygem' 
puts $: 

, а затем, в рубин, сделать

require 'rubygems' 
puts $: 

и показать нам, что вы получите, если вы не работали его.

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

Редактировать 2: Посмотрите, что произойдет, если вы введете puts Gem.path после того, как вы получили рубигемы как в irb, так и в ruby. См. thanks to Matt for describing Rubygems

+0

Хмм, yep, ruby ​​и irb, кажется, используют разные пути (рубин использует 1.9.1 папки, а irb использует 1.8 папки). Вы знаете, как я заставляю их использовать один и тот же путь? – grautur

+0

@ grautur: Я не знаю, что делать. Сожалею. –

0

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

1

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

Смежные вопросы