2010-05-26 180 views
0

我想從IRB運行以下ruby代碼,但無法要求使用gmail gem。Rubygems路徑問題

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 

這裏是我的gemlist:

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 instructions安裝新的Ruby/Rails版本。但是,請注意,直到我跑我這紅寶石不匹配hivelogic的說明:

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

我覺得這是問題,但我不知道讀迫使紅寶石路總是加載到/ usr /本地什麼/斌/紅寶石。它也可能是一條紅色的鯡魚,因爲我根本不知道這些部分是否合適。只要sudo gem安裝不起作用,我基本上就會丟失。

注意其他寶石做的工作:

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

問題:

  1. 當sudo的創業板安裝不允許您創建一個從類的對象,什麼是偵探的下一步解決這個問題?

  2. 創業板的各個部分如何適用於解決這些類型的問題?我已閱讀常見問題解答和文檔(http://docs.rubygems.org/read/book/3),但無論是錯過了還是無法挑選相關部分。

回答

1

看起來像你有一些誤解如何紅寶石加載文件。有一個包含路徑(查看$:變量)。當你需要的時候,ruby將從數組的第一個路徑開始,並檢查文件是否在那裏。如果是,則加載它,否則它將轉到包含路徑中的下一個目錄。

當你需要gmail,它看起來像它加載自己的gmail.rb。在該文件中執行require "gmail"將發現它自己,而不是gem的gmail.rb。

要修復它,你應該重新命名你的gmail.rb其他東西(my_gmail.rb,或其他任何東西,只要確保它與任何系統文件都不匹配)。

(該require 'ruby-gmail'失敗,因爲紅寶石Gmail的寶石不包含這樣的文件,你應該使用簡單require 'gmail',但在此之前重命名gmail.rb)

1

你IRB輸出似乎是約至於你需要去:

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

當你需要的Gmail「這是拉動當地gmail.rb文件 - 在其中有一個參考到未定義的Gmail類(?)。

不清楚爲什麼你會期望定義Gmail。沒有看到gmail.rb中的代碼,很難說出了什麼問題。

我注意到,在你的寶石名單中沒有任何稱爲「gmail」或任何類似的寶石。

因此,很難說出你想要完成什麼。也許你正在將寶石與基本的庫需求混淆在一起,或者假設Rails的常量查找功能是Ruby特性。

最有用的是,如果你可以發佈gmail.rb的內容。

+0

我試圖讓將要在我的寶石寶石列表是ruby-gmail(0.2.1,0.0.8)。我遵循了gem文檔http://github.com/dcparker/ruby-gmail的示例代碼部分。 這裏的gmail.rb: 需要的Gmail' 的Gmail = Gmail.new(用戶名,密碼) #...做的事情...... gmail.logout 我希望的結果是關於不定義我的用戶和密碼的錯誤,但它賣給我我不能初始化常量。 根據你上面的文章,我假設我的要求'gmail'在本地dir中調用gmail,這與要求gem和錯誤無關。 – johnnygoodman 2010-05-26 20:17:33

+0

我翻轉到Ubuntu linux嘗試同樣的事情,沒有一個gmail.rb文件在本地運行irb會話的目錄。 約翰尼@約翰尼膝上型:〜$ IRB IRB(主):001:0>需要 '的rubygems' =>真 IRB(主):002:0>需要 '紅寶石的Gmail' LoadError:沒有這樣的加載文件 - ruby​​-gmail \t from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in'gem_original_require' \t from /usr/local/lib/site_ruby/1.8/rubygems/ custom_require.rb:31:'require' \t from(irb):2 我在從隨機目錄運行irb的mac中獲得相同的結果。不需要'gmail'讓我訪問Gmail類嗎? – johnnygoodman 2010-05-26 20:44:13

+0

@johnnygoodman你有沒有找到解決這個問題? – keypulsations 2013-08-03 20:53:48