2017-01-29 20 views
0

更新: 私は実際にherokuのウェブサイトから私のアプリケーションにアクセスしてメールを送ってきましたが、私のプロダクションサーバcloud9 ide。それは普通ですか?チュートリアルではそれが私にそれを望んでいるのですか?Hartl Ruby on Railsチュートリアル - SendGridは生産現場でメールを送信しません

Michael HartlのRuby on Railsチュートリアルの第11章では、配備モードでサンプルアプリケーションに登録し、管理する電子メールでアカウントのアクティベーションメールを確認するよう求められます。私は電子メールを受信せず、herokuのsendgridアドオンは電子メール要求が送信されていないことを報告します。しかし、クラウド9 ide pumaサーバーコンソールでは、電子メールが正しい形式で正しいアドレスに送信されたことが報告され、コンソールからアクティベーショントークンと電子メールアドレスを取得できます。私は何が間違っているのか分かりません。うまくいけば、すべての関連するコードが以下に含まれています。助けてください。

実際にサンプルアプリのウェブサイトにアクセスして申し込みをクリックし、メールを待っていました。これは、Hartlが「プロダクションの新しいアカウントにサインアップする」という意味ではありませんか?

のconfig/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

私はそうです。これは私が展開のためのチュートリアルと一緒に使用している英雄アプリへの "アドオン"です。ダッシュボードにアクセスすると、電子メールのリクエストは0件と表示されます。 –

+0

コンソール(または別の方法)から 'SENDGRID_USERNAME'と 'SENDGRID_PASSWORD'を 'Heroku'に入れましたか? –

答えて

0

。私の最初の問題は、変数名を正しく書いていないことでした。私は自分のコードを見直して修正しました。チュートリアルによれば、私のアプリは今は正常に動作します。

イゴールが最後の答えで言ったように、config/environments.rbに特別なコードは必要ありません。あなたがそれを保持していれば消去する必要があります。

ヘロクの環境変数をheroku run printenvで確認してください。それらが正しい場合は、ちょうどテストのように悪い方法で試してください:あなたのsendgridのユーザ名とパスワードでENV['SENDGRID_xxx']を置き換えてください。

Thanks to Nathan Road