Rubygems Path Вопрос - PullRequest
       18

Rubygems Path Вопрос

0 голосов
/ 26 мая 2010

Я пытаюсь запустить следующий код ruby ​​из IRB, но не могу запросить гем gmail.

require 'rubygems'
require 'gmail'

gmail = Gmail.new("user", "pass")

Вот вывод IRB:

Johnny-Goodmans-MacBook-Pro:gmail johnnygoodman$ irb
>> require 'rubygems'
=> false
>> require 'gmail'
NameError: uninitialized constant Gmail
        from ./gmail.rb:6
        from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
        from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `require'
        from (irb):2

Вот вывод Gem.path:

>> Gem.path
=> ["/Users/johnnygoodman/.gem/ruby/1.8", "/Library/Ruby/Gems/1.8", "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8"]

И вывод среды:

Johnny-Goodmans-MacBook-Pro:gmail johnnygoodman$ gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 1.3.7
  - RUBY VERSION: 1.8.7 (2009-06-08 patchlevel 173) [universal-darwin10.0]
  - INSTALLATION DIRECTORY: /Library/Ruby/Gems/1.8
  - RUBY EXECUTABLE: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - universal-darwin-10
  - GEM PATHS:
     - /Library/Ruby/Gems/1.8
     - /Users/johnnygoodman/.gem/ruby/1.8
     - /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
     - :sources => ["http://rubygems.org/", "http://gems.github.com"]
  - REMOTE SOURCES:
     - http://rubygems.org/
     - http://gems.github.com

А какой рубин:

Johnny-Goodmans-MacBook-Pro:gmail johnnygoodman$ which ruby
/usr/bin/ruby

и .gemrc:

Johnny-Goodmans-MacBook-Pro:~ johnnygoodman$ cat .gemrc
--- 
:sources: 
- http://rubygems.org/
- http://gems.github.com
:backtrace: false
:benchmark: false
:verbose: true
:update_sources: true
:bulk_threshold: 1000

Вот мой список драгоценных камней:

Johnny-Goodmans-MacBook-Pro:~ johnnygoodman$ gem list

*** LOCAL GEMS ***

actionmailer (2.3.8, 2.3.5, 2.2.2, 1.3.6)
actionpack (2.3.8, 2.3.5, 2.2.2, 1.13.6)
actionwebservice (1.2.6)
activerecord (2.3.8, 2.3.5, 2.2.2, 1.15.6)
activeresource (2.3.8, 2.3.5, 2.2.2)
activesupport (2.3.8, 2.3.5, 2.2.2, 1.4.4)
acts_as_ferret (0.4.4, 0.4.3)
Ascii85 (1.0.0)
autotest (4.2.10, 4.2.9)
autotest-fsevent (0.2.2, 0.1.1)
autotest-growl (0.2.4, 0.2.0)
autotest-rails (4.1.0)
bigdecimal-segfault-fix (1.0.1)
capistrano (2.5.18, 2.5.11, 2.5.2)
cgi_multipart_eof_fix (2.5.0)
cheat (1.2.1)
chronic (0.2.3)
configuration (1.1.0)
daemons (1.0.10)
dnssd (1.3.1, 0.6.0)
fastthread (1.0.7, 1.0.1)
fcgi (0.8.8, 0.8.7)
ferret (0.11.6)
gem_plugin (0.2.3)
gemcutter (0.5.0, 0.4.1)
heroku (1.9.9, 1.8.5)
highline (1.5.2, 1.5.1, 1.5.0)
hoe (2.6.0, 2.5.0)
hpricot (0.8.2, 0.6.164)
json_pure (1.4.3, 1.2.3, 1.2.2)
launchy (0.3.5)
libxml-ruby (1.1.4, 1.1.3, 1.1.2)
mail (2.2.1)
mechanize (1.0.0, 0.9.3)
mime-types (1.16)
mongrel (1.1.5)
mysql (2.8.1)
needle (1.3.0)
net-scp (1.0.2, 1.0.1)
net-sftp (2.0.4, 2.0.1, 1.1.1)
net-ssh (2.0.22, 2.0.21, 2.0.17, 2.0.4, 1.1.4)
net-ssh-gateway (1.0.1, 1.0.0)
nokogiri (1.4.2, 1.4.1)
passenger (2.2.11, 2.2.9)
pdf-reader (0.8.5, 0.8.4, 0.8.3)
polyglot (0.3.1)
pony (1.0, 0.9, 0.6)
rack (1.1.0, 1.0.1)
rails (2.3.8, 2.3.5, 2.2.2, 1.2.6)
rake (0.8.7, 0.8.3)
RedCloth (4.2.3, 4.1.1)
rest-client (1.4.2, 1.3.1)
rspec (1.3.0)
rspec-rails (1.3.2)
ruby-gmail (0.2.1, 0.0.8)
ruby-openid (2.1.7, 2.1.2)
ruby-yadis (0.3.4)
rubyforge (2.0.4)
rubygems-update (1.3.7, 1.3.6, 1.3.5, 1.3.1)
rubynode (0.1.5)
scrapi (1.2.0)
shared-mime-info (0.1)
sqlite3-ruby (1.2.5, 1.2.4)
sys-uname (0.8.4)
termios (0.9.4)
tidy (1.1.2)
tmail (1.2.7.1)
treetop (1.4.5)
xmpp4r (0.5, 0.4)
ZenTest (4.3.1)

Я удалил порты Mac и использовал инструкции hivelogic для установки новой версии ruby ​​/ rails. Однако обратите внимание, что мой ruby ​​не соответствует инструкциям hivelogic, пока я не запущу:

Johnny-Goodmans-MacBook-Pro:~ johnnygoodman$ . ~/.profile
Johnny-Goodmans-MacBook-Pro:~ johnnygoodman$ which ruby
/usr/local/bin/ruby

Я думаю, что это проблема, но я не уверен, что читать, чтобы заставить путь ruby ​​всегда загружаться в / usr / local / bin / ruby. Это также может быть красная сельдь, так как я просто не знаю, как подходят детали. Как только sudo gem install не работает, я в основном заблудился.

Обратите внимание, что другие драгоценные камни работают:

Johnny-Goodmans-MacBook-Pro:~ johnnygoodman$ irb
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'mechanize'
=> true

Вопросы:

  1. Когда установка sudo gem не позволяет вам создать объект из класса, каковы дальнейшие шаги по решению проблемы?

  2. Как части драгоценного камня сочетаются друг с другом в применении к решению этих проблем? Я прочитал часто задаваемые вопросы и документы (http://docs.rubygems.org/read/book/3), но либо пропустил его, либо не смог выбрать нужные детали.

Ответы [ 2 ]

1 голос
/ 28 июня 2010

Похоже, у вас есть какое-то недопонимание, как ruby ​​загружает файлы. Есть включаемый путь (проверьте переменную $:). Когда вам что-то требуется, ruby ​​запускается с первого пути в массиве и проверяет, существует ли файл. Если это так, то он загружает его, в противном случае он переходит к следующему каталогу в пути включения.

Когда вам требуется gmail, похоже, что он загружает ваш gmail.rb. Выполнение require "gmail" в этом файле окажется вместо gmail.rb гема.

Чтобы исправить это, вам, вероятно, следует переименовать ваш gmail.rb во что-то другое (my_gmail.rb, или что-то еще, просто убедитесь, что он не соответствует ни одному системному файлу).

(require 'ruby-gmail' завершается неудачно, потому что гем ruby-gmail не содержит такого файла. Вы должны просто использовать require 'gmail', но перед этим переименуйте свой gmail.rb)

1 голос
/ 26 мая 2010

Ваш вывод IRB, похоже, настолько далеко, насколько вам нужно было пройти:

>> require 'gmail'
NameError: uninitialized constant Gmail
        from ./gmail.rb:6

Когда вам требуется «gmail», он извлекает ваш локальный файл gmail.rb, внутри которого есть ссылка на класс Gmail (?), Который не определен.

Неясно, почему вы ожидаете, что Gmail будет определен. Не видя код в gmail.rb, трудно сказать, что не так.

Я заметил, что в вашем списке драгоценных камней нет ни одного драгоценного камня под названием "gmail" или чего-то подобного.

Поэтому трудно сказать, чего вы пытаетесь достичь. Возможно, вы путаете гемы с требованием базовой библиотеки или предполагаете, что функция постоянного поиска Rails является функцией Ruby.

Наиболее полезным было бы, если бы вы могли опубликовать содержимое gmail.rb.

...