В чем разница между тем, где «требуются», и тем, где «Gem.available»?ищет драгоценные камни? - PullRequest
1 голос
/ 04 сентября 2010

Я немного озадачен тем, как пути работают с драгоценными камнями.Вот суть моей путаницы:

>> require 'rubygems'
=> false
>> Gem.available?('money')
=> true
>> require 'money'
LoadError: no such file to load -- money
        from (irb):3:in `require'
        from (irb):3
        from /usr/bin/irb:12:in `<main>'
>> Gem.available?('pony')
=> false
>> require 'pony'
=> true

Это выполняется irb 0.9.5(05/04/13) Это особенно запутанно, потому что gem list --local приводит к:

*** LOCAL GEMS ***

albino (1.0)
bcat (0.5.2)
builder (2.1.2)
bundler (1.0.0)
classifier (1.3.3)
diff-lcs (1.1.2)
directory_watcher (1.3.2)
fast-stemmer (1.0.0)
gdata (1.1.1)
gdata2 (0.1)
github-markup (0.5.0)
gollum (1.0.1)
google4r-checkout (1.0.6.1)
grit (2.2.0)
jekyll (0.7.0)
kwalify (0.7.1)
liquid (2.2.2)
maruku (0.6.0)
mime-types (1.16)
mocha (0.9.8)
money (3.0.5)
mustache (0.11.2)
nokogiri (1.4.3.1)
rack (1.2.1, 1.1.0)
rake (0.8.7)
rubygems-update (1.3.7)
sanitize (1.2.1)
sinatra (1.0)
syntax (1.0.0)
unicorn (1.1.3)

, в частности содержит money, но не pony.

Вот выходные данные gem env:

RubyGems Environment:
  - RUBYGEMS VERSION: 1.3.7
  - RUBY VERSION: 1.9.1 (2010-01-10 patchlevel 378) [x86_64-linux]
  - INSTALLATION DIRECTORY: /usr/lib/ruby/gems/1.9.1
  - RUBY EXECUTABLE: /usr/bin/ruby1.9.1
  - EXECUTABLE DIRECTORY: /usr/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /usr/lib/ruby/gems/1.9.1
     - /home/aresnick/.gem/ruby/1.9.1
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

И в случае, если это не ясноgem и ruby используют один и тот же рубин, то есть:

aresnick@dror:~$ which ruby
/usr/bin/ruby
aresnick@dror:~$ ls -al $(which ruby)
lrwxrwxrwx 1 root root 22 2010-08-28 20:08 /usr/bin/ruby -> /etc/alternatives/ruby
aresnick@dror:~$ ls -al /etc/alternatives/ruby
lrwxrwxrwx 1 root root 18 2010-08-28 20:08 /etc/alternatives/ruby -> /usr/bin/ruby1

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

aresnick@dror:~$ gem which pony
/var/lib/gems/1.9.1/gems/pony-1.0/lib/pony.rb
aresnick@dror:~$ gem which money
/usr/lib/ruby/gems/1.9.1/gems/money-3.0.5/lib/money.rb
aresnick@dror:~$ gem which sinatra
/var/lib/gems/1.9.1/gems/sinatra-1.0/lib/sinatra.rb
aresnick@dror:~$ gem which gdata
/usr/lib/ruby/gems/1.9.1/gems/gdata-1.1.1/lib/gdata.rb
aresnick@dror:~$ irb
>> require 'sinatra'
=> true
>> require 'gdata'
LoadError: no such file to load -- gdata
    from (irb):2:in `require'
    from (irb):2
    from /usr/bin/irb:12:in `<main>'

Итак, я думаю, что камни /usr/lib/ruby/gems/1.9.1 не найдены, а камни /var найдены.Я уверен, что это можно исправить с помощью символических ссылок, но мне было интересно: а) почему это происходит и б) где установлены эти пути и как их установить?

1 Ответ

0 голосов
/ 06 сентября 2010

У меня были похожие проблемы в системе Debian, которую я предполагаю, что вы используете или систему, основанную на том, что вы используете альтернативы, и проблема тогда заключалась в том, что я установил rubygems через apt-getа затем установил обновленную версию через источник.

Все испортилось хорошо.

Между командой Debian и rubygems идет какая-то "религиозная" война, так что просто установить rubygems из исходного кода в Debian проще.

У меня нет объяснения тому, что происходит, хотя.(

...