0

ルビー(レールではない)アプリで動作する次の簡単なコードがあります。

require 'gmail'

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

Gmail アカウントに接続して、そこでいくつかのことを行うことができます。

ただし、このGemを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

次のエラーが表示されます。

初期化されていない定数 Object::Gmail

を追加すると解決しrequire 'gmail'ます。私の質問は:

require gmailGemfile で既に指定しているのに、なぜそれをしなければならないのでしょうか?

4

1 に答える 1

1

モジュール/クラスの名前空間は、ディレクトリ構造と一致する必要があります。たとえば、 では、名前空間がRails によって自動ロードできるlib/foo/bar.rb場合にのみ、それ以外の場合は明示的に要求する必要があります。Foo::Bar

この場合、Gmail はディレクトリ構造と一致しないクラスとして定義されます。Gmail がモジュールとして定義されている場合 (名前空間::Gmailがディレクトリ構造と一致する)、明示的にrequire "gmail".

于 2012-04-05T01:45:54.223 に答える