Closed sumura80 closed 5 years ago
@sumura80
binding.pry
を使ってdebugするとどうなりますか?
@rexitorg app/controllers/users/registrations_controller.rb userコントローラで下記のようにサインアップ時にメールを送る設定をしてあります。
def create
super
binding.pry
UserMailer.signup_confirmation(user).deliver_now
end
def update
super
UserMailer.edit_privacy_confirmation(user).deliver_now
end
この状態で、binding.pryをするとuser登録は通常通りにできるのですが、メールが送信されない状態です。
Started POST "/users" for 127.0.0.1 at 2019-04-08 15:25:46 +0900
Processing by Users::RegistrationsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"uzI+edHjYa+ndNtByhns3M8Ucyr70RKBiueMBxIRbIHX9Y52pEjvlgxgnhiK2/ns/758NsK9IC7ngkLAbcXgEg==", "user"=>{"username"=>"Tomcat", "email"=>"pinetree321@hotmail.co.jp", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "button"=>""}
(0.2ms) begin transaction
User Exists (0.3ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = ? AND "users"."deleted_at" IS NULL LIMIT ? [["email", "pinetree321@hotmail.co.jp"], ["LIMIT", 1]]
User Exists (0.2ms) SELECT 1 AS one FROM "users" WHERE "users"."username" = ? AND "users"."deleted_at" IS NULL LIMIT ? [["username", "Tomcat"], ["LIMIT", 1]]
CACHE User Exists (0.0ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = ? AND "users"."deleted_at" IS NULL LIMIT ? [["email", "pinetree321@hotmail.co.jp"], ["LIMIT", 1]]
SQL (0.6ms) INSERT INTO "users" ("email", "encrypted_password", "created_at", "updated_at", "username") VALUES (?, ?, ?, ?, ?) [["email", "pinetree321@hotmail.co.jp"], ["encrypted_password", "$2a$11$yzF0X4uAlvsnOD8t2RgJye3G1ZT3mDUjcICGRYzxdZqWc9TjqHdqy"], ["created_at", "2019-04-08 06:25:47.163374"], ["updated_at", "2019-04-08 06:25:47.163374"], ["username", "Tomcat"]]
(1.0ms) commit transaction
Redirected to http://localhost:3000/
From: /app/controllers/users/registrations_controller.rb @ line 9 Users::RegistrationsController#create:
6: def create
7: super
8: binding.pry
=> 9: UserMailer.signup_confirmation(user).deliver_now
10: end
[1] pry(#<Users::RegistrationsController>)> user
NameError: undefined local variable or method `user' for #<Users::RegistrationsController:0x00007fcab955dbc0>
Did you mean? @user
from (pry):1:in `create'
[2] pry(#<Users::RegistrationsController>)> @user
=> #<User id: 12, email: "pinetree321@hotmail.co.jp", created_at: "2019-04-08 06:25:47", updated_at: "2019-04-08 06:25:47", username: "Tomcat", user_image: nil, admin: false, deleted_at: nil>
[3] pry(#<Users::RegistrationsController>)>
@rexitorg 12時間格闘の末、開発環境でメール送信ができるようになりました。
現在、development環境からproduction.rbにActionMailerの設定を記述するところです。 下記がdevelopment環境です。
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
address: 'smtp.gmail.com',
domain: 'gmail.com',
port: 587,
user_name: ENV['ACTION_MAILER_EMAIL_ADDRESS'],
password: ENV['ACTION_MAILER_EMAIL_PASSWORD'],
authentication: 'plain',
enable_starttls_auto: true
}
production環境では、
config.action_mailer.default_url_options
を自分のサイトのURLでよろしいのでしょうか?
Railsガイドでは、下記のようになっておりました。
config.action_mailer.default_url_options = { host: 'example.com' }
development環境では、下記のようにportも記述していたので、質問させていただきました。:man-bowing:
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
あれ?
[1] pry(#<Users::RegistrationsController>)> user
NameError: undefined local variable or method `user' for #<Users::RegistrationsController:0x00007fcab955dbc0>
は問題ない感じです?変数が定義されていないと怒られていますが..
mailerのhelperメソッドでpathをメールに記載するときとかに必要なoptionですよね https://qiita.com/minoriinoue/items/393d61b854a34358d102 自分のサイトのドメインで良いと思います:bow: ポートは本番で80番ポートでHTTPリクエストを受け付けるなら指定しなくて良いと思います:bow:
@rexitorg
ご回答ありがとうございます。
基礎的な質問で大変恐縮なのですが、本番の環境というのは、Herokuとかのことでよろしいんですよね?(自分はHerokuを使用しております。)
default_url_options
を production.rb
に設定して、実際のサイトでメールを送るということを想定しております。
下記のように設定して見ました。development
と違うのは、host:medplus.jp
の部分だけです。これでpushすればいいのですか?
間違えて本番で問題が起こるのが怖いので再確認させていただきました。:sweat:
#Actionmailerでメールを送る設定。development.rbと同じ
config.action_mailer.raise_delivery_errors = true
config.action_mailer.default_url_options = { host: 'medplus.jp'}
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
address: 'smtp.gmail.com',
domain: 'gmail.com',
port: 587,
user_name: ENV['ACTION_MAILER_EMAIL_ADDRESS'],
password: ENV['ACTION_MAILER_EMAIL_PASSWORD'],
authentication: 'plain',
enable_starttls_auto: true
}
```
@rexitorg こちら、本番環境でも無事、メールが送られるようになりました!
@rexitorg こちら解決しましたので、クローズさせていただきます。 ありがとうございました。:bow:
概要
@rexitorg さん、こんにちは。 ユーザーの新規登録の際にThanksメールを送りたいのですが、教えていただけませんでしょうか?ユーザー登録には、Deviseを使用しております。 今回、メールを送るのは「ユーザー新規登録時」と「ユーザーのパスワードやメールアドレスを変更した時」を2点です。 ユーザーのパスワードやメールアドレスを変更した時の例↓
実は、この機能は2月にdevelopment環境下で実装できておりました。 letter-opener-webというgemも利用し、画面上で確認していましたが、本日production環境に実装する前に試しにまたdevelopment環境でテストをしてみたところ、メールが送れなくなっていました。
下記のサイトなどを参考にしました。(他のサイトも使っています。) http://c5meru.hatenablog.jp/entry/2018/07/29/200011
解決するために行ったこと
以前実装した手順は下記の通りです。
エラーはなく、ユーザー登録はされます。
おかしい所があれば、ご指摘いただけませんでしょうか? よろしくお願いいたします。
メールの送信設定
メーラー作成
application_mailer.rb編集
user_mailer.rb 編集
application_mailer.rb
user_mailer.rb
users_controller.rb Create作成
letter_openerのインストールと表示 Gemfile
config/routes.rb
問題となっているアプリケーションのGitHub URL
git@github.com:sumura80/medplus-email.git