2012-04-04 14 views
0

が、私はルビー(ないレール)で動作しているシンプルな、次のコードを、持っている原因のアプリ:レール:ルビー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にする必要があります、私はすでにGemfileで指定している場合は?

答えて

1

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

この場合、Gmailはディレクトリ構造と一致しないクラスとして定義されています。 Gmailがモジュールとして定義されている場合(ネームスペース::Gmailはディレクトリ構造と一致しています)、明示的にrequire "gmail"を必要としません。

関連する問題