Rails: Devise не отправляет электронное письмо с подтверждением в продакшене (Heroku)

Я пытаюсь настроить подтверждение по электронной почте для новых пользователей моего сайта на Heroku. Он отлично работает в разработке (отправляется с правильного адреса электронной почты, хотя я никогда не указывал его в development.rb)

Вот код в development.rb: (я использовал MailCatcher)

config.action_mailer.raise_delivery_errors = true
config.action_mailer.default_url_options = { :host => 'localhost:3000'}
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {:address => "localhost", :port => 1025}

Вот код в production.rb:

config.action_mailer.default_url_options = {:host => 'myapp.herokuapp.com'}
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.smtp_settings = {
   :address => "smtp.gmail.com",
   :port => 587,
   :domain => 'myapp.herokuapp.com',  #I've also tried changing this to 'gmail.com'
   :authentication => :plain, # I've also tried changing this to :login
   :enable_starttls_auto => true,
   :user_name => '[email protected]',
   :password => 'mypassword'
 }

И вот последние несколько (из очень длинного списка) журналов Heroku, когда я набираю «журналы heroku» в командной строке:

2013-11-24T18:51:01.069086+00:00 app[web.1]:   Rendered layouts/_header.html.erb
(1.4ms)
2013-11-24T18:50:57.403500+00:00 heroku[router]: at=info method=GET path=/users/
confirmation/new host=myapp.herokuapp.com fwd="118.22.125.86" dyno=we
b.1 connect=30ms service=18ms status=304 bytes=0
2013-11-24T18:50:32.655624+00:00 heroku[router]: at=info method=GET path=/users/
sign_up host=myapp.herokuapp.com fwd="118.22.125.86" dyno=web.1 conne
ct=25ms service=78ms status=304 bytes=0

На производственном сайте Heroku просто написано: «Извините, но что-то пошло не так». Электронное письмо никогда не отправляется. Учетная запись с указанным адресом электронной почты никогда не входит в базу данных.

Изменить: вот файлы журнала после того, как я добавил config.log_level = :debug

2013-11-24T20:35:31.602702+00:00 heroku[router]: at=info method=GET path=/favico
n.ico host=myapp.herokuapp.com fwd="118.22.125.86" dyno=web.1 connect
=2ms service=9ms status=304 bytes=0
2013-11-24T20:35:13.963743+00:00 heroku[router]: at=info method=GET path=/favico
n.ico host=myapp.herokuapp.com fwd="118.22.125.86" dyno=web.1 connect
=1ms service=447ms status=200 bytes=0

И еще один:

2013-11-24T20:38:32.693982+00:00 app[web.1]:   vendor/bundle/ruby/2.0.0/gems/rac
k-1.4.5/lib/rack/handler/webrick.rb:59:in `service'
2013-11-24T20:38:32.694321+00:00 app[web.1]:   vendor/ruby-2.0.0/lib/ruby/2.0.0/
webrick/server.rb:295:in `block in start_thread'
2013-11-24T20:38:32.693982+00:00 app[web.1]:   vendor/bundle/ruby/2.0.0/gems/rac
k-cache-1.2/lib/rack/cache/context.rb:51:in `call'
2013-11-24T20:38:32.693982+00:00 app[web.1]:   vendor/ruby-2.0.0/lib/ruby/2.0.0/
webrick/httpserver.rb:94:in `run'
2013-11-24T20:38:32.693982+00:00 app[web.1]:   vendor/ruby-2.0.0/lib/ruby/2.0.0/
webrick/httpserver.rb:138:in `service'

Это только последние несколько журналов. Весь журнал слишком длинный, чтобы копировать его здесь. Я не уверен, что искать.


person user2669464    schedule 24.11.2013    source источник
comment
Я даже пытался изменить имя файла development.rb на production.rb и наоборот, чтобы посмотреть, что происходит. В этом случае он все еще работал в разработке, но не в производстве.   -  person user2669464    schedule 24.11.2013


Ответы (2)


У меня есть аналогичная настройка для приложения Rails в Heroku, которое использует Gmail. Вот отличия...

Ключ domain в ActionMailer smtp_settings не нужен, так как он используется только для Google Apps для бизнеса. Попробуйте удалить эту переменную конфигурации и повторно развернуть приложение.

Кроме того, в моей конфигурации нет следующего:

config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true

Я бы порекомендовал также удалить эти строки.

Наконец, моя строка default_url_options имеет ключ protocol со значением http. Таким образом, изменение этой конфигурации также может помочь:

config.action_mailer.default_url_options = {:host => 'myapp.herokuapp.com', :protocol => 'http'}
person CDub    schedule 24.11.2013
comment
Я удалил атрибут домена, закомментировал три строки и добавил протокол http. Все равно не работает и выдает ту же ошибку - person user2669464; 24.11.2013
comment
Проблема в том, что файл журнала мало чем помогает. Не могли бы вы увеличить уровень журнала в рабочей среде до DEBUG, перезапустить приложение и повторить попытку? - person CDub; 24.11.2013
comment
Я добавил config.log_level = :debug в свой файл production.rb. - person user2669464; 25.11.2013
comment
2013-11-24T20:35:31.602702+00:00 heroku [маршрутизатор]: at=info method=GET path=/favico n.ico host=myapp.herokuapp.com fwd=118.22.125.86 dyno=web.1 connect = 2ms service=9ms status=304 bytes=0 2013-11-24T20:35:13.963743+00:00 heroku[router]: at=info method=GET path=/favico n.ico host=myapp.herokuapp.com fwd= 118.22.125.86 dyno=web.1 connect =1ms service=447ms status=200 байт=0 - person user2669464; 25.11.2013
comment
Я снова набрал логи heroku и получил другой набор логов: 2013-11-24T20:38:32.694321+00:00 app[web.1]:vendor/ruby-2.0.0/lib/ruby/2.0.0/webrick /server.rb:295:in block in start_thread' 2013-11-24T20:38:32.693982+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/rac k-cache-1.2/lib/rack/cache/context.rb:51:in call' 2013-11-24T20:38:32.693982+00:00 приложение[web.1]: поставщик/ruby-2.0.0/lib/ruby/2.0.0/webrick/httpserver. rb: 94: в run' 2013-11-24T20:38:32.693982+00:00 app[web.1]: vendor/ruby-2.0.0/lib/ruby/2.0.0/ webrick/httpserver.rb:138:in service' - person user2669464; 25.11.2013
comment
приведенные выше журналы - это только конец журналов. Я не уверен, на что обращать внимание, если ключ к ошибке находится где-то посередине. - person user2669464; 25.11.2013
comment
Можете ли вы добавить свои файлы журнала к вопросу, чтобы его было легче читать? - person CDub; 25.11.2013

Производство.рб

  config.action_mailer.delivery_method = :smtp

  config.action_mailer.perform_deliveries = true

  config.action_mailer.raise_delivery_errors = true

  config.action_mailer.default_url_options = { :host => 'myapp.herokuapp.com', :protocol => 'http' }

  config.action_mailer.smtp_settings = {
    address:              'smtp.gmail.com',
    port:                 587,
    domain:               'gmail.com',
    user_name:            '[email protected]',
    password:             'Your gmail password',
    authentication:       'plain'
  }

Шаг 2. Перейдите на страницу http://www.google.com/accounts/DisplayUnlockCaptcha и нажмите «Продолжить».

Причина: Google блокировал доступ из неизвестного места.

person Sanjay Choudhary    schedule 11.03.2019