Безумие пути загрузки Ruby 1.9.1
Вопрос
Хорошо, я только что потратил 4 часа, пытаясь разобраться в этом, но безуспешно.Я перепробовал все обычные подозреваемые и погуглил все комбинации ruby 1.9.1, load path, gems, mac os x, freebsd, prawn и прочего.Суть заключается в следующем:
Когда я компилирую ruby1.9.1-p129 из исходных текстов в mac os x 10.5, путь загрузки по умолчанию ($:), который я получаю, равен:
ruby -e "puts $:" /usr/local/lib/ruby/gems /usr/local/lib/ruby/site_ruby/1.9.1 /usr/local/lib/ruby/site_ruby/1.9.1/i386-darwin9.7.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.7.0 /usr/local/lib/ruby/vendor_ruby /usr/local/lib/ruby/1.9.1 /usr/local/lib/ruby/1.9.1/i386-darwin9.7.0 .
например, когда я устанавливаю драгоценный камень prawn, я получаю:
gem which prawn (checking gem prawn-0.5.0.1 for prawn) /prawn.rb
и когда я пытаюсь потребовать этого, я получаю:
ruby -e "require 'prawn'" -e:1:in `require': no such file to load -- prawn (LoadError) from -e:1:in `'
Единственный способ, которым я смог решить эту проблему, - это сделать что-то глупое вроде этого:
$: << "/usr/local/lib/ruby/gems/1.9.1/gems/prawn-0.5.0.1/lib"
что, конечно, совершенно нелепо.Итак, вопрос в том, как мне заставить ruby 1.9.1 распознавать и следовать правильному пути к gems?У меня никогда не было этой проблемы с 1.8.7, поэтому я предполагаю, что она специфична для 1.9.1.Я чувствую, что мне здесь не хватает чего-то совершенно очевидного, и я был бы очень признателен за любую помощь!
Решение
настройка GEM_PATH=/usr/local/lib/ruby/gems/1.9.1
решил проблему.Я знал, что это было что-то простое.Меня просто бесит, что на выяснение этого ушел ВЕСЬ ДЕНЬ!!Это связано с тем, что никогда не возникало этой проблемы с 1.8.7 и, конечно же, НЕ с RTFM!!
Другие советы
та же проблема на kubuntu karmic.
установка:
$ sudo apt-get install build-essential ruby1.9.1-full libsqlite3 libsqlite3-dev rubygems1.9
$ sudo gem install sqlite3-ruby rails thin --no-rdoc --no-ri
Результат:
$ ruby -e "require 'rubygems'; require 'sqlite3'"
-e:1:in `require': no such file to load -- sqlite3 (LoadError)
from -e:1:in `<main>'
решение:
$ export GEM_PATH=/usr/lib/ruby1.9.1/gems/1.9.1/
require 'rubygems'
require 'prawn'
Если только в версии 1.9 что-то не изменилось и вам больше не нужно сначала запрашивать rubygems.
В следующий раз, когда у вас возникнет такая проблема, не забудьте запустить gem env
из командной строки.Это то, что происходит в Windows, но принцип во многом тот же:
C:\Documents and Settings\a.grimm>gem env
RubyGems Environment:
- RUBYGEMS VERSION: 1.3.5
- RUBY VERSION: 1.9.1 (2010-01-10 patchlevel 378) [i386-mingw32]
- INSTALLATION DIRECTORY: C:/Ruby19/lib/ruby/gems/1.9.1
- RUBY EXECUTABLE: C:/Ruby19/bin/ruby.exe
- EXECUTABLE DIRECTORY: C:/Ruby19/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86-mingw32
- GEM PATHS:
- C:/Ruby19/lib/ruby/gems/1.9.1
- C:/Documents and Settings/a.grimm/.gem/ruby/1.9.1
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- http://gems.rubyforge.org/
Я ищу другой ответ на ту же проблему.В некоторых ситуациях (например.задачи запуска системы) установка переменных окружения перед запуском ruby невозможна.
Есть ли какой-то способ при запуске кода ruby (v >= 1.9.1) требовать gems?Без установки GEM_PATH?