我有以下简单的代码,它在 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
我收到以下错误:
未初始化的常量 对象::Gmail
如果我添加require 'gmail'
,这将得到解决.我的问题是:
如果我已经在 Gemfile 中指定了,为什么我必须require gmail
?
模块/类命名空间必须与目录结构匹配。例如,在 lib/foo/bar.rb
中,当且仅当命名空间Foo::Bar
时,它才能由 Rails 自动加载,否则您必须明确要求它。
在这种情况下,Gmail 被定义为与目录结构不匹配的类。如果 Gmail 被定义为模块(命名空间::Gmail
与目录结构匹配(,那么您永远不需要明确require "gmail"
.