Не могу включить SendGrid в мой проект Rails3 - PullRequest
4 голосов
/ 23 сентября 2011

Я очень плохо знаком с рубином и рельсами (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 сообщает, что электронное письмо было отправлено в обеих ситуациях ...

1 Ответ

2 голосов
/ 17 апреля 2012

Для тех, кто не читал комментарии к исходному сообщению, ответ таков: сервер необходимо перезапустить после внесения изменений в зависимости или конфигурацию вашего приложения.

Насколькопричина, по которой все работало в консоли, каждый раз, когда вы загружаете консоль Rails, вы перезагружаете все свое приложение, включая новые зависимости и файлы конфигурации.

...