0

我有以下简单的代码,它在 ruby​​(不是 rails)应用程序中工作:

require 'gmail'

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

我能够连接到 Gmail 帐户并在那里做一些事情。

但是,我想在 Rails 应用程序中使用这个 Gem,因此我尝试将以下内容添加到 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

我收到以下错误:

未初始化的常量 Object::Gmail

如果我添加require 'gmail'. 我的问题是:

require gmail如果我已经在 Gemfile 中指定了,我为什么要这样做?

4

1 回答 1

1

模块/类命名空间必须与目录结构相匹配。例如,in lib/foo/bar.rb,当且仅当命名空间是Foo::BarRails 才能自动加载它,否则您必须显式地要求它。

在这种情况下,Gmail 被定义为一个与目录结构不匹配的类。如果 Gmail 被定义为一个模块(命名空间::Gmail匹配目录结构),那么您将永远不需要显式require "gmail".

于 2012-04-05T01:45:54.223 回答