我有简单的以下代码,它在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中指定了它?
答案 0 :(得分:1)
模块/类命名空间必须与目录结构匹配。例如,在lib/foo/bar.rb
中,当且仅当命名空间为Foo::Bar
时,Rails才能自动加载,否则您必须明确要求它。
在这种情况下,Gmail被定义为一个类,它与目录结构不匹配。如果Gmail被定义为模块(名称空间::Gmail
与目录结构匹配),那么您将永远不需要明确require "gmail"
。