Я относительно новичок в программировании и очень новичок в веб-разработке, и последние несколько недель я прошел курс обучения Ruby on Rails. Текущий шаг, который я выполняю, включает добавление аутентификации пользователя на мой сайт с помощью Devise, но я получаю "тихую ошибку", когда аутентификационное электронное письмо не отправляется.
В соответствии с руководством, которому я следую в рамках учебного курса, я выполнил следующие шаги:
- Установлен гем Devise
Настроил его, добавив в мой файл development.rb следующее:
... config.action_mailer.default_url_options = { host: 'localhost:3000' } config.action_mailer.delivery_method = :smtp config.action_mailer.perform_deliveries = true config.action_mailer.raise_delivery_errors = true end
Создал модель пользователя с помощью devise перед обновлением файла [timestamp] _devise_create_users.rb для включения параметра подтверждения.
Ran rake db: migrate
Добавлен аддон Sendgrid (подтвержден с помощью «аддона heroku»)
Создал инициализатор setup_mail.rb со следующим кодом:
if Rails.env.development? ActionMailer::Base.delivery_method = :smtp ActionMailer::Base.smtp_settings = { address: 'smtp.sendgrid.net', port: '587', authentication: :plain, user_name: ENV['SENDGRID_USERNAME'], password: ENV['SENDGRID_PASSWORD'], domain: 'heroku.com', enable_starttls_auto: true } end
Установлен камень Фигаро
- В application.yml добавлены SENDGRID_USERNAME и SENDGRID_PASSWORD.
- Установите
production: SECRET_KEY_BASE
на случайно сгенерированный токен в файле secrets.yml
В режиме разработки приложение теперь успешно загружает форму регистрации пользователя, но после регистрации электронное письмо для аутентификации не отправляется. Вместо этого генерируется следующая ошибка:
Net::OpenTimeout in Devise::RegistrationsController#create
Я огляделся и кажется, что несколько других людей сообщили о той же ошибке при использовании Cloud 9., но никто не дал предложений, как решить эту проблему. Моя (несколько необразованная) теория заключается в том, что настройка хоста в development.rb должна быть другой или порт в setup_mail.rb должен быть другим, поскольку я использую службу C9 вместо локальной машины, но я не уверен как узнать, на что они должны быть установлены (если действительно проблема).
Пока я пробовал
- Изменение localhost на 8080 в development.rb (это порт, который, похоже, использует c9 на основе текста в терминале)
- Изменение домена setup_mail.rb на sendgrid.com
- Убедитесь, что учетная запись Sendgrid не была заблокирована по какой-либо причине
Мой файл User.rb в настоящее время выглядит так
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
end
Может ли кто-нибудь дать мне понять, что происходит?
config.action_mailer.default_url_options = { host: '$IP', port: $PORT }
в свой development.rb, как это было предложено кем-то в вашей ссылке < / а>? - person Luis Menjivar   schedule 27.05.2015'587'
на587
(строка для числа) в smtp_settings? (просматривая здесь) - person Mutahhir   schedule 27.05.2015