2012-04-04 31 views
0

我有簡單的下面的代碼,這是在一個紅寶石(不導軌)應用工作:Rails的:使用Ruby Gmail的寶石會導致問題

require 'gmail' 

Gmail.new('my_account', 'my_password') do |gmail| 
end 

我能去的Gmail帳戶的連接,在那裏做一些東西。

不過,我想在一個Rails應用程序來使用這個寶石,因此,我曾嘗試加入以下到的Gemfile:

gem "ruby-gmail",   "0.2.1" 
gem "mime",    "0.1" 

然而,當我嘗試在rake任務使用這個,像這樣的:

task :scrap_receipts_gmail => :environment do 
    Gmail.new('my_account', 'my_password') do |gmail| 
    puts gmail.inspect 
    end 
end 

我得到以下錯誤:

uninitialized constant Object::Gmail

這解決了,如果我加require 'gmail'。我的問題是:

爲什麼我必須要require gmail,如果我已經指定在Gemfile中?

回答

1

模塊/類名稱空間必須與目錄結構相匹配。例如,在lib/foo/bar.rb中,當且僅當命名空間爲Foo::Bar時,才能由Rails自動加載,否則必須明確要求它。

在這種情況下,Gmail被定義爲一個類,它與目錄結構不匹配。如果Gmail被定義爲模塊(命名空間::Gmail匹配目錄結構),則永遠不需要明確require "gmail"