質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

Q&A

3回答

1755閲覧

rails本番環境にてメールが送信できない。

Giga-Bakken

総合スコア5

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

0グッド

1クリップ

投稿2020/01/01 19:09

編集2022/01/12 10:55

前提・実現したいこと

railsでチャットアプリを開発しております。
メールサーバーはconohaのメールサーバーを利用しており、サンダーバードにて送受信はできております。
deviseを利用しており、会員登録時などにメール認証を活用していますが、本番環境ではメールを送信できず、画面遷移も
"500 Internal Server Error"ページに遷移してしまいます。
しかしながら、データベースには登録されています。(当然、認証メールが届かないのでアカウントは利用不可)

メール送信、正しい画面遷移を実現したいと考えています。
どんなことでも良いのでコメントをいただけると幸いです。よろしくお願いいたします。

発生している問題・エラーメッセージ

production.log
ログではメールを送ろうとしているみたいです。。。

I, [2020-01-02T03:45:14.860731 #729] INFO -- : [*] Started POST "/users/confirmation" for IPアドレス at 2020-01-02 03:45:14 +0900 I, [2020-01-02T03:45:14.861993 #729] INFO -- : [*] Processing by Devise::ConfirmationsController#create as HTML I, [2020-01-02T03:45:14.862094 #729] INFO -- : [*] Parameters: {"utf8"=>"✓", "authenticity_token"=>"***", "user"=>{"email"=>"メールアドレス"}, "commit"=>"送信"} D, [2020-01-02T03:45:14.864029 #729] DEBUG -- : [*] User Load (0.5ms) SELECT `users`.* FROM `users` WHERE `users`.`unconfirmed_email` = 'メールアドレス' ORDER BY `users`.`id` ASC LIMIT 1 D, [2020-01-02T03:45:14.866518 #729] DEBUG -- : [*] User Load (0.5ms) SELECT `users`.* FROM `users` WHERE `users`.`email` = 'メールアドレス' ORDER BY `users`.`id` ASC LIMIT 1 D, [2020-01-02T03:45:14.867093 #729] DEBUG -- : [*] (0.1ms) BEGIN D, [2020-01-02T03:45:14.868245 #729] DEBUG -- : [*] (0.1ms) COMMIT I, [2020-01-02T03:45:14.869725 #729] INFO -- : [*] Rendering devise/mailer/confirmation_instructions.html.erb I, [2020-01-02T03:45:14.870078 #729] INFO -- : [*] Rendered devise/mailer/confirmation_instructions.html.erb (0.3ms) D, [2020-01-02T03:45:14.870521 #729] DEBUG -- : [*] Devise::Mailer#confirmation_instructions: processed outbound mail in 1.8ms I, [2020-01-02T03:45:14.872170 #729] INFO -- : [*] Sent mail to メールアドレス (1.6ms) D, [2020-01-02T03:45:14.872213 #729] DEBUG -- : [*] Date: Thu, 02 Jan 2020 03:45:14 +0900 From: 送信元メールアドレス Reply-To: 送信元メールアドレス To: 受信先メールアドレス Message-ID: <5e0ce8bad4b98_2d92b282c18467c41816@163-44-170-225.mail> Subject: =?UTF-8?Q?=E3=82=A2=E3=82=AB=E3=82=A6=E3=83=B3=E3=83=88=E3=81=AE=E6=9C=89=E5=8A=B9=E5=8C=96=E3=81=AB=E3=81=A4=E3=81=84=E3=81=A6?= Mime-Version: 1.0 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 暗号化された文字列 I, [2020-01-02T03:45:14.872669 #729] INFO -- : [*] Rendering errors/internal_server_error.html.erb within layouts/error I, [2020-01-02T03:45:14.872868 #729] INFO -- : [*] Rendered errors/internal_server_error.html.erb within layouts/error (0.1ms) I, [2020-01-02T03:45:14.873108 #729] INFO -- : [*] Completed 500 Internal Server Error in 11ms (Views: 0.7ms | ActiveRecord: 1.2ms)

該当のソースコード

production.rb

# ActionMailer config.action_mailer.raise_delivery_errors = true config.action_mailer.delivery_method = :smtp config.action_mailer.default_url_options = { host: 'ドメイン名', :protocol => 'https' } host = 'ドメイン名' config.action_mailer.smtp_settings = { :address => "smtp.ドメイン名.conoha.io", :port => '587', :authentication => :plain, :user_name => "メールサーバーのユーザー名", :password => ENV["MAIL_PASSWORD"], :domain => 'ドメイン名', :enable_starttls_auto => true }

試したこと

下記のサイトを参考に試行錯誤しましたが解決できませんでした。
Rails Guide Action Mailer の基礎
【Rails】ConoHaメールサーバーを契約してRailsアプリからメール送信する方法

基本的に検索するとGMAILの記事が多かったです。
現在私が考えている可能性といたしましては、Active Jobに原因があるのかなと考えております。
Rails Guide Active Job

railsのメール機能(ActionMailer)にもデフォルトでActiveJobが使われているらしく、ActiveJobの本番対応をしていないのが現状です。

補足情報(FW/ツールのバージョンなど)

ruby
rails 5.1.6
ActionCable(websocket)
mysql
capistrano
unicorn
nginx
devise gem
conohaVPS
CentOS8
ssl let's encrypt
ConohaVPSのメールサーバー
サンダーバード
ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

no1knows

2020/01/13 03:06

1月2日に2件のアドバイスをもらっているかと思いますが、実行した結果はどうなりましたか?
Giga-Bakken

2020/01/13 09:33

・tyamaguc07さんのアドバイスを実行 メールサーバーとの問題であることが確定。メールのエラーを単体で出すように設定しました。ただ発生するエラーは以前と変わりないのでググってもわからない。 ・yut148さんのアドバイスを実行 参考先を閲覧した結果、以前試したことがありましたので今回は試しておりません。 以上です。よろしくお願いします。
no1knows

2020/01/13 09:49

まず、回答していただいた方のコメント欄にやってどうなったかを記載するようにしたほうが良いかと思います。 それによってさらなるサポートを受けられるかもしれません。 >メールサーバーとの問題であることが確定。 と記載がありますが、主語がないので何を意味しているかわからないのですが… 今回の質問の「本番環境でメール送信できない」のは、「メールサーバーとの接続がうまくいっていない」からと判明したということでしょうか?
no1knows

2020/01/13 20:42

>まず、回答していただいた方のコメント欄にやってどうなったかを記載するようにしたほうが良いかと思います。 >それによってさらなるサポートを受けられるかもしれません。
guest

回答3

0

メールのレンダリングは正常に挙動しているが、メールサーバとの間で何かしら問題があり、Internal Server Errorとなっていると推測します。

したがって、まず以下のように config.action_mailer.raise_delivery_errorsのでfalseを指定し メールサーバとの間の問題かどうかをはっきりさせてみてください。

production.rb

1 config.action_mailer.raise_delivery_errors = false

この状態で、会員登録を実行しエラーにならなければ、メールサーバとの間で何かしら問題が起きていることがほぼ確実となります。(会員登録の前にrailsの再起動を忘れないでくださいね。)

さて、メールサーバとの間の問題であれば、どんなエラーが発生しているかを知りたいので、エラー内容をログに書き出すように設定を以下のように変更してください。(合わせて、先程した設定をもとに戻します)

production.rb

1 config.action_mailer.logger = Logger.new('log/production_mail.log', 'weekly') 2 config.action_mailer.raise_delivery_errors = true

変更後、会員登録を実行し log/producton_mail.log にエラーが出ていればそのエラーでググるなど頑張ってみてください。

投稿2020/01/02 05:29

tyamaguc07

総合スコア28

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Giga-Bakken

2020/01/02 10:13

コメントありがとうございます。試してみます。
Giga-Bakken

2020/01/13 21:52

ご指摘の通り検証しました。それでも会員登録はできましたのでやはりメールサーバーとの問題かと思われます。エラーログも個別で出せるようにはなりましたが、内容に変化はありませんでした。
guest

0

どんなことでも良いのでコメントがほしいとの事なので回答します。
エラーで

I, [2020-01-02T03:45:14.872669 #729] INFO -- : [*] Rendering errors/internal_server_error.html.erb within layouts/error

とあるので、viewの記載内容に誤りがあるのではと推測します。

https://railsguides.jp/action_mailer_basics.html
にある、cronjobなどから今すぐ送信したい場合はの箇所を参考にして単にメールを送れるかを確認してみてはいかがでしょうか。

投稿2020/01/02 04:47

yut148

総合スコア752

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Giga-Bakken

2020/01/02 10:13

コメントありがとうございます。
guest

0

本番用サーバにactive_jobのデフォルト設定(async adapter)を利用するのはやめた方が良いでしょう。
キューがオンメモリであるため、サーバの再起動が起きるとジョブの履歴が残らずに消えてしまいます。

そのため、sideqickや、delayed_jobなどを利用した本番用のgem導入と設定を併せて行うことをお勧めします。

ただ、async_adapterでもメールサーバには接続ができるはずなので、まずは原因をきりわけましょう。
internal server errorの前にerrorテンプレートをレンダリングしてることから、コントローラの処理あるいは、ネットワーク上のエラーどちらも考えられるので、メール送信のactionの該当処理に対してrescueでエラーを取得し、詳細なログを吐くようにしてみてください。

ネットワークの問題であれば、実際にホストのサーバにログインできるのであれば、ログインして、mail serverにcurlやtelnetで接続できるかどうか試してみることで、接続情報があっているかどうかの切り分けができます。

投稿2020/01/15 05:20

編集2020/01/15 05:30
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Giga-Bakken

2020/01/17 03:12

コメントありがとうございます。 試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問