2012-04-04 5 views
0

Ich habe das einfach folgenden Code, der in einem Rubin (nicht Schienen) App funktioniert:Rails: Die Verwendung gem Rubin-gmail verursacht Probleme

require 'gmail' 

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

Ich bin in der Lage zu bekommen, um eine Verbindung mit dem Google Mail-Konto und Mach ein paar Sachen da drinnen.

Allerdings mag ich dieses Juwel in einer Rails-Anwendung verwenden, und daher habe ich versucht, das Hinzufügen der folgende in das Gemfile:

gem "ruby-gmail",   "0.2.1" 
gem "mime",    "0.1" 

Allerdings, wenn ich versuche, diese Aufgabe in einem Rechen zu verwenden, wie dies:

task :scrap_receipts_gmail => :environment do 
    Gmail.new('my_account', 'my_password') do |gmail| 
    puts gmail.inspect 
    end 
end 

ich folgende Fehlermeldung erhalten:

uninitialized constant Object::Gmail

Dies ist gelöst, wenn ich hinzufügen require 'gmail'. Meine Frage ist:

Warum müsste ich require gmail haben, wenn ich das schon in der Gemfile angegeben habe?

Antwort

1

Der Modul/Klassen-Namespace muss mit der Verzeichnisstruktur übereinstimmen. Zum Beispiel, in lib/foo/bar.rb, wenn und nur wenn der Namespace ist Foo::Bar kann es automatisch von Rails geladen werden, andernfalls müssen Sie es explizit erfordern.

In diesem Fall ist Gmail als eine Klasse definiert, die nicht mit der Verzeichnisstruktur übereinstimmt. Wenn Google Mail als Modul definiert wurde (Namespace ::Gmail entspricht der Verzeichnisstruktur), müssen Sie nie explizit require "gmail" eingeben.