🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
unicorn

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

Ruby on Rails 6

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

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

AWS(Amazon Web Services)

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

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

Q&A

1回答

1581閲覧

We're sorry, but something went wrong.を解決しrailsアプリを表示させたい

anago1030

総合スコア1

unicorn

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

Ruby on Rails 6

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

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

AWS(Amazon Web Services)

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

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

0グッド

0クリップ

投稿2021/02/18 10:55

編集2021/02/19 17:01

解決したいこと

railsでアプリを作成し、awsのEC2を用いてデプロイを行いました。
途中まで正常に動作していたのですが、急にエラーが起こってしまい、アプリが動かせない状況です。
ブラウザ上のWe're sorry, but something went wrongのエラーを解決したいです。

unicornは起動していることを確認済みです。

開発環境

  • macOS Catalina
  • Ruby 2.6.5
  • Ruby on Rails 6.0
  • AWS(EC2)
  • unicorn
  • nginx
  • mariaDB
  • Capistrano

エラー画面

イメージ説明

試したこと

1. unicornのエラーログを確認

php:ターミナル

1[ec2-user@ip-172-31-45-167 app]$ less log/unicorn.stderr.log 2 3# 実行結果 4I, [2021-01-07T07:26:08.724759 #12148] INFO -- : Refreshing Gem list 5I, [2021-01-07T07:26:10.526894 #12148] INFO -- : listening on addr=0.0.0.0:3000 fd=8 6E, [2021-01-07T07:26:10.527365 #12148] ERROR -- : Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) (Mysql2::Error::ConnectionError)

ログの結果から、データベースが起動していないのではないかと考えたのでステータスを確認しました。

2. データベースとnginxが起動しているか確認

php:ターミナル

1# データベースのステータスを確認 2[ec2-user@ip-172-31-45-167 app]$ sudo systemctl status mariadb 3 4# 実行結果 5● mariadb.service - MariaDB database server 6 Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled) 7 Active: active (running) since 水 2021-02-17 12:24:07 UTC; 20h ago 8 Main PID: 6900 (mysqld_safe) 9 Tasks: 20 10 Memory: 75.5M 11 CGroup: /system.slice/mariadb.service 12 ├─6900 /bin/sh /usr/bin/mysqld_safe --basedir=/usr 13 └─7066 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --soc... 14 15 217 12:24:05 ip-172-31-45-167.ap-northeast-1.compute.internal systemd[1]: Starting MariaDB database server... 16 217 12:24:05 ip-172-31-45-167.ap-northeast-1.compute.internal mariadb-prepare-db-dir[6812]: Database MariaDB is probably initialized in /var/lib/mysql already, nothing is done. 17 217 12:24:05 ip-172-31-45-167.ap-northeast-1.compute.internal mariadb-prepare-db-dir[6812]: If this is not the case, make sure the /var/lib/mysql is empty before running mariadb-prepare-db-dir. 18 217 12:24:05 ip-172-31-45-167.ap-northeast-1.compute.internal mysqld_safe[6900]: 210217 12:24:05 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'. 19 217 12:24:05 ip-172-31-45-167.ap-northeast-1.compute.internal mysqld_safe[6900]: 210217 12:24:05 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql 20 217 12:24:07 ip-172-31-45-167.ap-northeast-1.compute.internal systemd[1]: Started MariaDB database server. 21 22 23 24 25 26 27 28# nginxのステータスを確認 29[ec2-user@ip-172-31-45-167 app]$ sudo systemctl status nginx.service 30 31# 実行結果 32● nginx.service - The nginx HTTP and reverse proxy server 33 Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled) 34 Drop-In: /etc/systemd/system/nginx.service.d 35 └─override.conf 36 Active: active (running) since 水 2021-02-17 19:24:31 UTC; 13h ago 37 Process: 10238 ExecStartPost=/bin/sleep 0.1 (code=exited, status=0/SUCCESS) 38 Process: 10229 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS) 39 Process: 10224 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) 40 Process: 10187 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS) 41 Main PID: 10236 (nginx) 42 Tasks: 2 43 Memory: 3.8M 44 CGroup: /system.slice/nginx.service 45 ├─10236 nginx: master process /usr/sbin/nginx 46 └─10239 nginx: worker process 47 48 217 19:24:31 ip-172-31-45-167.ap-northeast-1.compute.internal systemd[1]: Starting The nginx HTTP and reverse proxy server... 49 217 19:24:31 ip-172-31-45-167.ap-northeast-1.compute.internal nginx[10224]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok 50 217 19:24:31 ip-172-31-45-167.ap-northeast-1.compute.internal nginx[10224]: nginx: configuration file /etc/nginx/nginx.conf test is successful 51 217 19:24:31 ip-172-31-45-167.ap-northeast-1.compute.internal systemd[1]: Started The nginx HTTP and reverse proxy server.

3. socketのパスを確認

php:ターミナル

1# ターミナル 2[ec2-user@ip-172-31-45-167 app]$ mysql_config --socket 3 4# 実行結果 5/var/lib/mysql/mysql.sock

php:database.yml

1# config/database.yml 2 3production: 4 <<: *default 5 database: entertainer_production 6 username: root 7 password: <%= ENV['DATABASE_PASSWORD'] %> 8 socket: /var/lib/mysql/mysql.sock

とくに間違いを発見出来なかったので何が原因か特定できない状況です。
どうかご教示願いたいです。。

追記

less log/unicorn.stderr.logコマンドでunicornのログを更新

イメージ説明
イメージ説明

tmpの権限確認
イメージ説明

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

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

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

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

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

yu_1985

2021/02/18 11:20

unicornはちゃんとproductionで起動していますか? ps aux | grep unicorn で確認したらどうなりますかね。
anago1030

2021/02/18 11:48

早速返信ありがとうございます! [ec2-user@ip-172-31-45-167 app]$ ps aux | grep unicorn ec2-user 17885 0.0 11.6 528896 117584 ? Sl 09:48 0:01 unicorn_rails master -c config/unicorn.rb -E production -D ec2-user 17889 0.0 11.6 537232 117792 ? Sl 09:49 0:00 unicorn_rails worker[0] -c config/unicorn.rb -E production -D ec2-user 18597 0.0 0.0 119436 936 pts/0 S+ 11:47 0:00 grep --color=auto unicorn 上記の結果になります。
yu_1985

2021/02/18 14:34

よくよく考えたら、現状unicornが既に立ち上がっているということは起動時にDB接続できなくてエラーになってるわけではないですね。 stderrのログはどの操作をした時に出たものかわかりますか? productionの設定で socket: /var/lib/mysql/mysql.sock としているにも関わらず Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) (Mysql2::Error::ConnectionError) となっているのが気になるのですが。 We're sorry, but something went wrongを表示したタイミングで出力されたログですか? もう一度同じエラーが出てきた時にstderrのログに何が出力されるかを確認してみてください。
anago1030

2021/02/19 03:47

yu_1985さんご返信ありがとうございます。。 less /log/unicorn.stderr.logではなく、tailコマンドで直近のログを確認してみました。 # 実行結果 [ec2-user@ip-172-31-45-167 app]$ tail log/unicorn.stderr.log I, [2021-01-08T10:10:19.289750 #619] INFO -- : reaped #<Process::Status: pid 625 exit 0> worker=0 I, [2021-01-08T10:10:19.289905 #619] INFO -- : master complete I, [2021-01-08T10:11:05.219200 #737] INFO -- : Refreshing Gem list I, [2021-01-08T10:11:06.433785 #737] INFO -- : unlinking existing socket=/var/www/entertainer/tmp/sockets/unicorn.sock I, [2021-01-08T10:11:06.434000 #737] INFO -- : listening on addr=/var/www/entertainer/tmp/sockets/unicorn.sock fd=9 I, [2021-01-08T10:11:06.439135 #737] INFO -- : master process ready I, [2021-01-08T10:11:06.442764 #741] INFO -- : worker=0 ready /var/www/entertainer/app/views/modules/_event-index.html.haml:101: warning: key :class is duplicated and overwritten on line 101 I, [2021-01-08T10:47:51.050237 #737] INFO -- : reaped #<Process::Status: pid 741 exit 0> worker=0 I, [2021-01-08T10:47:51.050378 #737] INFO -- : master complete すると上記の結果になり、エラーがなかったです。 なので、Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)のエラーはだいぶ過去のエラーの可能性があります。 加えて、nginxのログも確認してみたのですが、エラーの確認が取れました。 [ec2-user@ip-172-31-45-167 ~] $ sudo less /var/www/nginx/error.log # 実行結果 2021/02/18 07:56:38 [error] 10239#0: *98 connect() to unix:/var/www/entertainer/shared/tmp/sockets/unicorn.sock failed (111: Connection refused) while connecting to upstream, client: 159.65.151.166, server: 54.150.30.40, request: "GET /stalker_portal/c/ HTTP/1.1", upstream: "http://unix:/var/www/entertainer/shared/tmp/sockets/unicorn.sock:/stalker_portal/c/", host: "54.150.30.40"
yu_1985

2021/02/19 03:58

tailコマンドだと10行しか見られないのでオプションで行数を増やすかlessやcatで全部表示して周辺の時間帯のログを確認するかしてください。 10行だけだとエラーがないのか10行の外にあるのかが判断つきません。 望ましいのはアクセスしてエラーになったその時刻に即ログを確認して何が追記されたかを見ることです。 エラーが発生した時刻とログのタイムスタンプをちゃんと見比べましょう。 nginxのほうはタイムスタンプを見ると明らかにstderr.logと時間帯が異なるので特に関係ない可能性が非常に高いです。 それと、`We're sorry, but something went wrong.`はRailsのエラーメッセージなので、少なくともRailsにたどり着いてエラーになっていると思われます。
anago1030

2021/02/19 09:54

丁寧に説明していただきありがとうございます。。 理解が追いついておらず、申し訳ありません。 lessコマンドを実行した結果を質問に追記する形で画像を添付しました。 エラーが起きたのは2日前の2/17の16時から18時あたりなのですが、、
anago1030

2021/02/19 11:51

参考記事ありがとうございます。 ログの末尾の画像を質問の方で添付し直しました。
yu_1985

2021/02/19 15:25

末尾のみでなくスクロールしてその少し前も見てほしいです。 それだけでは結局tailと大差ないので…。 見えてる範囲ではPermission Deniedが気になります。 恐らく/var/www/entertainerがRailsのrootだと思いますが、tmpディレクトリ以下の権限はどうなっていますか? 取り急ぎ ls -l /var/www/entertainer でtmpディレクトリの権限をご確認ください。
anago1030

2021/02/19 15:55

取り急ぎ、tmpの権限を確認し追記しました。
guest

回答1

0

bootsnapのcacheが問題でpermission deniedになっている、というのが調べたらちょこちょこ引っかかります。
正しいかどうか不明ですが、nginxのユーザで書き込もうとしているのかもしれません
一応参考
Errno::EACCES: Permission denied #77

tmpディレクトリ以下はec2-user:ec2-userで775なので、ec2-userというユーザ、ec2-userグループに所属しているユーザのいずれかでないと書き込みができません。
nginxのユーザで書き込もうとしてエラーになってるとすれば、nginxユーザをec2-userグループに追加するか、
いっそのことtmpディレクトリ以下を777にして全てのユーザに書き込み可能にしてしまうかでおそらくは解決します(全ユーザ・グループに書き込みが可能なのでセキュリティ的にどうかという話がありますが、一旦は置いておきます)。

bash

1sudo usermod -aG ec2-user nginx 2id nginx

※idコマンドで、nginxユーザがec2-userグループをサブグループとして追加しているかを確認する。

↑がダメなら

bash

1sudo chmod -R 777 /var/www/entertainer/tmp

投稿2021/02/19 16:09

編集2021/02/19 16:11
yu_1985

総合スコア7588

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

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

anago1030

2021/02/19 17:18

sudo chmod -R 777 /var/www/entertainer/tmpを実行し権限を変更してみましたが、エラーが解決しませんでした。 僕の方でもbootsnap permission deniedで調べてみて試したことが2つあります。 1. bootsnapを利用しないように設定する。 (config/boot.rbでrequire 'bootsnap/setup'をコメントアウトする) →解決せず 2. bootsnapのcacheを削除 Railsプロジェクトディレクトリの tmp/cache へ移動 bootsnap-load-path-cache と bootsnap-compile-cache をrmコマンドで削除 →エラー解決せず
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問