Rails: использование драгоценного камня ruby-gmail вызывает проблемы

У меня есть простой следующий код, который работает в приложении ruby ​​(не rails):

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 gmail, если я уже указал это в Gemfile?


person Hommer Smith    schedule 04.04.2012    source источник


Ответы (1)


Пространство имен модуля/класса должно соответствовать структуре каталогов. Например, в lib/foo/bar.rb тогда и только тогда, когда пространство имен Foo::Bar, оно может быть автоматически загружено Rails, в противном случае вам придется требовать его явно.

В этом случае Gmail определяется как класс, который не соответствует структуре каталогов. Если Gmail был определен как модуль (пространство имен ::Gmail соответствует структуре каталогов), вам никогда не потребуется явно указывать require "gmail".

person Tomato    schedule 05.04.2012