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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 5

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

Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

1回答

2547閲覧

【Completed 401 Unauthorizedエラー】本番環境のみで起きる問題について

tomomomo

総合スコア22

Ruby on Rails 5

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

Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/12/07 04:40

編集2021/12/13 01:49

現状と問題

現在railsでツイッタークロンアプリを作成しているものです。
ローカル環境ではほぼほぼ機能が完成したので、EC2,Nginx,Unicorn等を使ってAWSでデプロイしました。

画像投稿機能をactivestorageを用いて実装しているのですが、本番環境で画像投稿をすると画面が固まり、development.logでログを確認してみると
Completed 401 Unauthorized in 0ms (ActiveRecord: 0.0ms)が最後に出ていることが確認できました。

ユーザー登録にはdeviseのgemを用いてます。
ググってみるとdeviseのエラーだという記事がいくつかみられましたが、新規登録等はできるので問題はそこではないんじゃないかと考えています。

画像投稿だけに限ってこのようなエラーが出るのですが、同じような現象を経験されたことがある方はいませんでしょうか。
よろしくお願いいたします。

コードを絞ることが困難なため、GithubのURLを貼らせていただきます。こちらです。

追記

検証ツールにて画像つきで投稿ボタンを押した際には、Failed to load resource: the server responded with a status of 500 ()が出ました。
画像を貼らせていただきます。


追記の追記

config/environments/development.rbで、config.active_storage.service = :localという記述があるのを目にしました。
s3バケットなどを使っていなかったので、現在s3を導入してconfig.active_storage.service = :amazonに変更しようと考えております。

画像の投稿時に500エラーが出るのですが、上記は関係あるとみていいのですかね。。。

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

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

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

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

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

winterboum

2021/12/07 22:17

現象と関係ないところのlog載せても意味ないです。というよりむしろ無いほうがよい。「本番環境で画像投稿をすると画面が固まり」の部分を載せてください AWSでdevelopmentですか? productionにしないのですか?
tomomomo

2021/12/08 02:29

>「本番環境で画像投稿をすると画面が固まり」の部分 画像を添付して投稿を押下した際に、画面が変わらずinsert文などもログには出てきていませんでした。 検証ツールからconsoleを確認したところ、500エラーが出ました。(Failed to load resource: the server responded with a status of 500 ()) その際のスクリーンショットを追加で貼らせていただきましたので、ご確認いただけますでしょうか?
tomomomo

2021/12/08 02:32

>AWSでdevelopmentですか? productionにしないのですか? デプロイに関してですが、メンターの方に手伝ってもらったため真意は申し訳ないのですがわかりません。 database.ymlではproductionの設定はしています。 mysqlに入ってuse production;などを反映させるのでしょうか。 今回developmentを使用しているのはデプロイをしましたが、同時に問題等出た時にアップデートを随時したいからという理由があるかもしれません(関係なければすみません) 記事を見てみたのですが、こちらの内容で修正すべきでしょうか。https://qiita.com/mokuo/items/b766ca36521530fd3084#%E6%89%8B%E9%A0%86
winterboum

2021/12/08 02:47

ブラウザに500が返ってるってことはサーバーのlogがあるはずです。 それを載せましょう。 insert文などもログにないのはそこまで行く前に500してるから。 Startedから500までのlogを。
tomomomo

2021/12/08 03:21

すみません、記事の方には文字数の関係で掲載できませんでした。
winterboum

2021/12/08 04:19

log を全部貼れとは言ってません。 画像投稿 したときの Started POST から 500で終わるまで、です。 コメントに貼ったのあとから読む人の妨げになるので、消してください。
tomomomo

2021/12/08 04:34

コメントに関しまして、削除リクエストを送らせていただきました。 ajaxで実装していることは関係ありませんよね? development.logで投稿ボタンを押し、検証ツールでconsoleにエラーが出たことを確認してからtail -n 300 deveolpment.logを確認しているのですが、Started POSTが出てこず、500エラーも見当たりません。
winterboum

2021/12/08 06:45

tail -n 300 deveolpment.log だからでしょう。 less deveolpment.log して探してください
winterboum

2021/12/08 06:46

コメント自分で編集できますよ。中身全部消しはできないかもだけど 不要データなので削除 ぐらい書いておけば?
tomomomo

2021/12/08 07:39

>コメント自分で編集できますよ。中身全部消しはできないかもだけど 不要データなので削除 ぐらい書いておけば? 編集しました。 >less deveolpment.log して探してください less deveolpment.logとless -R log/development.logでログを確認したのですが、500エラーが見つかりません。。。
winterboum

2021/12/08 07:46

ですか、、、、 logローテーションとかしてます?
tomomomo

2021/12/08 13:27

そのようなものは設定していないと思われます。。。
winterboum

2021/12/08 22:34

ではこうしてみてください。 1. 投稿直前まで操作を進める 2. サーバーを停止する 3. logを削除するか、名前を変える 4. サーバーを起動し、できるだけ早く投稿する そうすると GET "/" の 401 の他に Started POST があると思います
tomomomo

2021/12/09 01:18

2に関しまして、bundle exec unicorn_rails -c config/unicorn.rb -D -E development でサーバーを立ち上げたりしているのですが、kill -9で止めてから再実行でよろしいでしょうか。
tomomomo

2021/12/09 04:11

手順通りやってみたのですが、Started GET "/"の後にCompleted 401 Unauthorized in 8ms (ActiveRecord: 0.0ms)が出てその後も同じログだけでPOSTが出てきませんでした。
winterboum

2021/12/09 08:31

postはしたんですよね?
tomomomo

2021/12/10 01:18

しました。 検証ツールでもPOST直後に500エラーが出ていることは確認できております。
winterboum

2021/12/10 07:02

見たのはlessですね?tail ではないですね?
tomomomo

2021/12/10 11:11

lessで間違いありません。
guest

回答1

0

たぶんローカルと本番環境それぞれで rake middleware を叩いて比較してみるといいんじゃないかと。。。
config が dev と prod で違うので、何かひっかけてるんじゃないかと。

投稿2021/12/12 19:55

_raki

総合スコア82

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

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

tomomomo

2021/12/13 01:46

ご回答ありがとうございます。 比較してみたのですが、両方同じ記述となりました。 configがdevとprodで違うとのことですが、やはり本番環境でdevを使っているのは問題がありますか? 今から移行するとなれば時間がかかるみたいで、迷っていたのですが。。。
tomomomo

2021/12/13 01:50

また、追記させていただきました箇所に目を通してもらうことは可能でしょうか。 config.active_storage.service = :localとなってた箇所が怪しいのではと思っているのですが。
_raki

2021/12/13 01:57

config の dev に設定されている値が本番環境で問題なく動くならどのconfigを使うかは問題ないと思います。 むしろ本番環境用に設定するべき値がわかっていないことのほうが問題です。。。 先の人がコメントしているとおり、正確なログ(アプリケーションやサーバの)を確認して、 どこに問題があるのかを確認するのは一般的なエンジニアの仕事です。 ログがないと見当違いのところを探して時間を浪費するだけなので、必要なログがちゃんと見れるようになりましょう。 細かく見てないのでアレですが、nginxを使用しているならアクセスログとエラーログ、unicorn もいるので リポジトリルート下の log と tmp ディレクトリの中、そこに書き込み権限がちゃんとあるか(logは書けるけどtmpには書けないとかザラにある)とか、が確認ポイントかなと。
_raki

2021/12/13 02:03

ところで、どんなメンターに習ってるのかわからないけど、devとはいえリポジトリの設定ファイルにIDとパスワードを平文で記載してあるのはいただけない。 ましてやdevのconfigを使ってec2に上げてます、なら、本番機であるec2もそのIDとパスワードでDBに接続できてしまう。 後で変えるとか正式な本番じゃないとかの言い訳に関係なく、エンジニアとしての心構えとしてセキュリティ意識はとても大事なので、いまのうちにどうにかしたほうがいい。
_raki

2021/12/13 02:08

config.active_storage.service = :local は config/storage.yml の中でアップロードされたファイルをどこに格納するか、を決めているだけです。 ec2上のリポジトリルートの storage ディレクトリにファイルを保存しようとするはずです。 log や tmp と同じパーミッションになっていれば問題ないはず(まぁ怪しいところのひとつだとは思うけど。。。)
tomomomo

2021/12/13 02:37

>config の dev に設定されている値が本番環境で問題なく動くならどのconfigを使うかは問題ないと思います。 むしろ本番環境用に設定するべき値がわかっていないことのほうが問題です。。。 設定するべき値とは何のことでしょうか。。。 > nginxを使用しているならアクセスログとエラーログ、unicorn もいるので nginx,unicornについてもログを確認済ですが、エラーに関するようなものは見当たらなかったです。
tomomomo

2021/12/13 02:38

>devとはいえリポジトリの設定ファイルにIDとパスワードを平文で記載してあるのはいただけない。 database.ymlのはなしでしょうか。申し訳ありません。環境変数等にまだ直せていませんでした。
tomomomo

2021/12/13 02:41

>ec2上のリポジトリルートの storage ディレクトリにファイルを保存しようとするはずです。 log や tmp と同じパーミッションになっていれば問題ないはず(まぁ怪しいところのひとつだとは思うけど。。。) そうなのですね。ご教示いただきありがとうございます。 自分自身、今回のエラーについてはかなりの時間をかけているのですが、原因を見つけることができていません。 ローカルで問題は起きないのに本番のみ起こっているのでログくらいしか頼りにならないのですが、、
_raki

2021/12/13 02:50

ローカル環境でアップロードすると storage ディレクトリにアップロードされたファイルが残るはずでは? 本番でも同じことをすれば同じようにファイルが残るはずなのでそれを確認しましょう。 ファイルが存在していなければ storage ディレクトリの権限問題です。 存在しているようなら、storage自体には問題がなく、別の、例えばDBのファイルアップロードした際に記録されるテーブルなどに問題があるかもしれません。 単にマイグレーション忘れとか。
_raki

2021/12/13 02:53

ログに関してはエラーメッセージだけが必要なわけではないです。 極端な話、問題が起きる直前まで画面を進めた上で、log, tmp, storage の中をクリーンにしてから エラーを発生させれば、問題の箇所が絞れるはずです。 処理順序や内容などでどこに問題があるかわかると思うので工夫してみましょう。 ぶっちゃけ本職のエンジニアはできないって言ってる人の問題がないと思うとか、見当たらない、みたいな言葉は一切信用してません。 確実なデータ(ログ)以外に信用できるものはないのだから。。。
tomomomo

2021/12/13 03:00

ローカル環境はS3を導入して保存先はamazonにしました。 本番環境でstorageディレクトリを確認してみます。
_raki

2021/12/13 03:03

> ローカル環境はS3を導入して保存先はamazonにしました これじゃんw そしてそのあたりはコミットされてない?(ならわかるわけがない 単に EC2 から対象の S3 へのアクセス権限がないのでは? インスタンスプロファイルが設定されてないとか間違ってるとか。。。
tomomomo

2021/12/13 03:10

>極端な話、問題が起きる直前まで画面を進めた上で、log, tmp, storage の中をクリーンにしてから エラーを発生させれば、問題の箇所が絞れるはずです。 簡単にないと言ってしまい申し訳ありません。 言っていただいたように探すようにします。
tomomomo

2021/12/13 03:12

>これじゃんw 今さっきs3というブランチでpushしてきました。 >単に EC2 から対象の S3 へのアクセス権限がないのでは? インスタンスプロファイルが設定されてないとか間違ってるとか。。。 これに関しては今調べてみます。
tomomomo

2021/12/13 03:26

本番環境でs3ブランチに入ってstorageディレクトリを確認したところ、中身が何もありませんでした。 storage ディレクトリの権限問題ということなのでしょうか?
_raki

2021/12/14 02:11

そうっぽい。 AWS のアクセスキーとシークレットキーを使用して、CLI から対象のバケットにアクセスできるか確認してみてはどうでしょう?
_raki

2021/12/14 02:17

https://blog.naoshihoshi.com/entry/2018/06/18/153000 この記事のような処理になっているはずなので、記事の最後にあるやり方でアクセスキーとシークレットキーを引っ張り出して、 ``` export AWS_ACCESS_KEY_ID= export AWS_SECRET_ACCESS_KEY= aws s3 ls s3://tuittaa-bucket ``` みたいな。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問