2017-01-29 3 views
0

UPDATE: Я получил его, чтобы отправлять электронные письма, фактически получая доступ к моему приложению через веб-сайт heroku, но он все еще не работает, когда я запускаю приложение с рабочего сервера в моем облако9 идеал. Это нормально? Это то, как учебник хочет, чтобы я это сделал?Hartl Ruby on Rails Tutorial - Sendgrid не отправляет электронное письмо в производство

В главе 11 учебного пособия Майкла Хартла Ruby on Rails вам предлагается зарегистрироваться для примера приложения в режиме развертывания с помощью электронного письма, которое вы контролируете, и проверить свою учетную запись электронной почты для электронного письма активации учетной записи. Я не получал никаких писем и надписей sendgrid для отчетов heroku, которые не были отправлены по электронной почте. Тем не менее, в консоли cloud 9 ide puma сервер сообщает, что письмо было отправлено с правильным форматом, на правильный адрес, и я могу получить токен активации и адрес электронной почты с консоли. Я не уверен, что я делаю неправильно. Надеемся, что все соответствующие коды включены ниже. Пожалуйста помоги.

Я действительно отправился на сайт примера приложения и нажал регистрацию, а затем ждал электронного письма. Разве это не то, что означает Хартл, «подписываясь на новую учетную запись в производстве»?

конфигурации/environment.rb:

# Load the Rails application. 
require_relative 'application' 

# Initialize the Rails application. 
Rails.application.initialize! 

#Sendgrid configurations from their website 
ActionMailer::Base.smtp_settings = { 
    :user_name =>ENV['SENDGRID_USERNAME'], 
    :password =>ENV['SENDGRID_PASSWORD'], 
    :domain => 'heroku.com', 
    :address => 'smtp.sendgrid.net', 
    :port  => 587, 
    :authentication => :plain, 
    :enable_starttls_auto => true 
} 

мейлеры/application_mailer:

class ApplicationMailer < ActionMailer::Base 
    default from: '[email protected]' 
    layout 'mailer' 
end 

сред/production.rb:

config.action_mailer.raise_delivery_errors = true 
    config.action_mailer.delivery_method = :smtp 
    host = 'gentle-lake-88943.herokuapp.com' 
    config.action_mailer.default_url_options = { host: host } 
    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 
    } 

users_controller.rb:

def create 
    @user = User.new(user_params) 
    if @user.save 
     @user.send_activation_email 
     flash[:info] = "Please check your email to activate your account" 
     redirect_to root_url 
    else 
     render 'new' 
    end 
    end 

user.rb:

def activate 
    update_columns(activated: true, activated_at: Time.zone.now) 
    end 

    def send_activation_email 
    UserMailer.account_activation(self).deliver_now 
    end 

routes.rb:

resources :account_activations, only: [:edit] 
+0

у вас есть активное [Sendgrid] (https://sendgrid.com/ счет)? –

+0

Я, да. Это «дополнение» к приложению heroku, которое я использую вместе с учебным пособием для развертывания. Когда я обращаюсь к его панели управления, он говорит 0 запросов на электронные письма. –

+0

Вы помещали «SENDGRID_USERNAME» и «SENDGRID_PASSWORD» в «Heroku» с консоли (или по-другому)? –

ответ

0

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

Как говорит Игорь на своем последнем ответе, вам не нужен специальный код в config/environment.rb, поэтому вы должны его стереть, если будете его хранить.

Проверьте переменные окружения в Heroku с помощью heroku run printenv. Если они верны, попробуйте BAD, так же как и тест: замените ENV['SENDGRID_xxx'] своим именем пользователя и паролем sendgrid.

Thanks to Nathan Road

Смежные вопросы