Я очень плохо знаком с рубином и рельсами (3 дня и считая), поэтому моя проблема, вероятно, что-то глупое. Тем не менее, это кажется чем-то глупым, что не может быть решено с помощью поиска ответов в Интернете. (
Я создаю простое приложение для блога, следуя этому руководству: http://guides.rubyonrails.org/getting_started.html. Работает нормально, никаких проблем.
Затем я настроил SendGrid, и я тоже могу отправлять письма через него.
Теперь я пытаюсь использовать этот gem sendgrid: https://github.com/stephenb/sendgrid. Я установил его с помощью 'gem install sendgrid', и, похоже, он работал без проблем.
В соответствии с инструкциями на github, мне просто нужно добавить «includeGrid» в мой класс почтовой программы, и я готов к работе. Я так и сделал:
class Emailer < ActionMailer::Base
include SendGrid
...
end
Но когда я запускаю приложение, я получаю эту ошибку: неинициализированная константа Emailer :: SendGrid
Я сделал несколько других вещей, которые, казалось, имели смысл, основываясь на том, что я прочитал:
- Добавлен 'gem sendgrid' в мой Gemfile. Это добавило три строки в мой Gemfile.lock:
- sendgrid (1.0.1)
- 1025 * JSON *
- 1027 * JSON *
- Добавлен 'require sendgrid' в моем файле environment.rb.
Тем не менее, ошибка все еще сохраняется. Одна вещь, которая может указывать на проблему, состоит в том, что когда я смотрю на $ LOAD_PATH, у него нет каталога sendgrid. Для сравнения, другой драгоценный камень, включенный таким же образом, - sqlite3, и я вижу путь "... / sqlite3-1.3.4 / lib", но я не вижу "... / sendgrid-1.0.1 / lib ».
Может кто-нибудь разглядеть, какая глупость на меня обрушилась на этот раз?
EDIT:
Я обнаружил кое-что очень интересное. По крайней мере, для меня ... Если я войду в консоль рельсов, все на самом деле, кажется, работает нормально. Вот вывод моей сессии:
ruby-1.9.2-p290 :006 > include SendGrid
=> Object
ruby-1.9.2-p290 :007 > sendgrid_category :use_subject_lines
=> :use_subject_lines
ruby-1.9.2-p290 :008 > sendgrid_category "Welcome"
=> "Welcome"
ruby-1.9.2-p290 :009 > p = Post.new(:title => "A new post", :content => "With garbage text")
=> #<Post id: nil, name: nil, title: "A new post", content: "With garbage text", created_at: nil, updated_at: nil>
ruby-1.9.2-p290 :010 > Emailer.send_email("nick@sidebark.com", p).deliver
=> #<Mail::Message:2194904560, Multipart: false, Headers: <Date: Thu, 22 Sep 2011 16:52:41 -0700>, <From: ... blah, bah, blah...>>
Письмо было отправлено И категория была зарегистрирована SendGrid (я мог видеть это на странице статистики).
Итак, главный вопрос: почему мое приложение позволяет мне включать SendGrid только тогда, когда я запускаю команды из консоли? Какая разница в окружающей среде и т. Д.? 1045 *
Также обратите внимание, что электронные письма отправляются из консоли, но НЕ из потока приложений, даже если development.log сообщает, что электронное письмо было отправлено в обеих ситуациях ...