2012-04-04 59 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"