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

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

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

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

Q&A

1回答

1611閲覧

AWSにデプロイ後、502 Bad Gatewayが発生

taniyan512

総合スコア2

Ruby

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

0グッド

1クリップ

投稿2022/12/09 23:22

編集2022/12/10 01:53

前提

EC2環境において、railsアプリを開きたいが502 Bad Gatewayが発生する。

試したこと

https://teratail.com/questions/308033
こちらのサイトを参考にしたところ、この方は、puma.rbとnginxのソケットの表記が違ったということで自分も確認してみると、
puma.rb
bind "unix:///var/www/portfolio/tmp/sockets/puma.sock"
portfolio.conf
server unix:/var/www/portfolio/tmp/sockets/puma.sock;

となっていました。/の数が違うからエラーが発生していると思い、poftolio.confをpuma.rbに合わせましたが
結果は変わりませんでした。次にnginxのエラーログを見てみると以下のようになりました。

[taniyan@ip-10-0-1-106 portfolio]$ sudo tail -f /var/log/nginx/error.log 2022/12/09 22:43:22 [error] 29275#29275: *162 connect() to unix:///var/www/portfolio/tmp/sockets/puma.sock failed (111: Connection refused) while connecting to upstream, client: 142.44.193.80, server: 13.114.251.153, request: "GET /.env.bak HTTP/1.1", upstream: "http://unix:///var/www/portfolio/tmp/sockets/puma.sock:/.env.bak", host: "ec2-13-114-251-153.ap-northeast-1.compute.amazonaws.com" 2022/12/09 22:43:23 [error] 29275#29275: *164 connect() to unix:///var/www/portfolio/tmp/sockets/puma.sock failed (111: Connection refused) while connecting to upstream, client: 142.44.193.80, server: 13.114.251.153, request: "GET /info.php HTTP/1.1", upstream: "http://unix:///var/www/portfolio/tmp/sockets/puma.sock:/info.php", host: "ec2-13-114-251-153.ap-northeast-1.compute.amazonaws.com" 2022/12/09 22:43:24 [error] 29275#29275: *166 connect() to unix:///var/www/portfolio/tmp/sockets/puma.sock failed (111: Connection refused) while connecting to upstream, client: 142.44.193.80, server: 13.114.251.153, request: "GET /config/aws.yml HTTP/1.1", upstream: "http://unix:///var/www/portfolio/tmp/sockets/puma.sock:/config/aws.yml", host: "ec2-13-114-251-153.ap-northeast-1.compute.amazonaws.com" 2022/12/09 22:43:24 [error] 29275#29275: *168 connect() to unix:///var/www/portfolio/tmp/sockets/puma.sock failed (111: Connection refused) while connecting to upstream, client: 142.44.193.80, server: 13.114.251.153, request: "GET /_profiler/phpinfo HTTP/1.1", upstream: "http://unix:///var/www/portfolio/tmp/sockets/puma.sock:/_profiler/phpinfo", host: "ec2-13-114-251-153.ap-northeast-1.compute.amazonaws.com"

エラーログを見てみると、12/9の時点でエラーが発生していますが、ソケットの表記を合わせたのは12/10でありこのエラーが最新のものかがわからない状態です。これ以上どこを調べていいかがわからなくなったためどなたかご教授願います。

追記

ドキュメントルート(nginx)の位置がおかしいかもしれないと思い、確認しましたが恥ずかしながらどこがおかしいかがわかりません。念の為はっておきます。

upstream puma { server unix:///var/www/portfolio/tmp/sockets/puma.sock; } server { server_name 13.114.251.153; keepalive_timeout 0; access_log /var/log/nginx/portfolio.access.log main; client_max_body_size 4G; root /var/www/portfolio/public; location ~ .*\.(swf|SWF|ico|ICO|jar|txt|gz|js) { root /var/www/portfolio/public; expires 15m; break; } location ~ ^\/fonts\/* { root /var/www/portfolio/public; expires 15m; break; } location ~ ^\/assets\/* { root /var/www/portfolio/public; break; } location ~ ^\/favicon\/* { root /var/www/portfolio/public; break; } location = /manifest.json { root /var/www/portfolio/public; break; } location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; #auth_basic "Restricted"; #auth_basic_user_file /etc/nginx/.htpasswd; #if ($http_x_forwarded_proto = "http") { #rewrite ^(.*) https://$server_name$1 #break; #} proxy_pass http://puma; } "portfolio.conf" 51L, 1081B

補足情報

rails 7
ruby 3.1.1
AWS
WC2
nginx
puma

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

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

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

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

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

guest

回答1

0

No such file or directory ではなく Connection refused なので、パスの指定は正しく、puma.sock ファイルも存在するようです。
touch などで通常ファイルを作成すると Connection refused になりましたので、puma.sock がソケットファイルでない可能性が考えられます。
ls -l /var/www/portfolio/tmp/sockets/puma.sock でソケットファイルであること、また、lsof /var/www/portfolio/tmp/sockets/puma.sock, fuser /var/www/portfolio/tmp/sockets/puma.sock などでソケットファイルで待ち受けているプロセスを確認ください。

-------- (以下は間違い) --------

upstream: "http://unix:///var/www/portfolio/tmp/sockets/puma.sock:

http:// と unix:// が重複しています。
proxy_pass 箇所の http:// は不要ではないでしょうか。

proxy_pass http://puma; ↓ proxy_pass puma;

投稿2022/12/11 11:49

編集2022/12/11 12:18
TaichiYanagiya

総合スコア12146

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

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

TaichiYanagiya

2022/12/11 12:04

ごめんなさい、http:// 必要でした。
taniyan512

2022/12/11 22:18

お返事ありがとうございます。 >ls -l /var/www/portfolio/tmp/sockets/puma.sock でソケットファイルであること、また、lsof/var/www/portfolio/tmp/sockets/puma.sock, fuser /var/www/portfolio/tmp/sockets/puma.sock などでソケットファイルで待ち受けているプロセスを確認ください。 コマンドをそれぞれ実行すると、以下のようになりました。 [taniyan@ip-10-0-1-106 ~]$ ls -l /var/www/portfolio/tmp/sockets/puma.sock srwxrwxrwx 1 taniyan taniyan 0 12月 9 21:48 /var/www/portfolio/tmp/sockets/puma.sock [taniyan@ip-10-0-1-106 ~]$ lsof /var/www/portfolio/tmp/sockets/puma.sock [taniyan@ip-10-0-1-106 ~]$ fuser /var/www/portfolio/tmp/sockets/puma.sock
TaichiYanagiya

2022/12/12 01:33

lsof, fuser で紐付いているプロセスが見えないのですね。 puma プロセスが強制終了か何かでソケットファイルだけが残っているのではないでしょうか?
taniyan512

2022/12/12 22:22

>puma プロセスが強制終了か何かでソケットファイルだけが残っているのではないでしょうか? ソケットファイルのみが残っている場合、どのような処理を行えばよろしいでしょうか? また、 https://qiita.com/iloveomelette/items/19bacb6658a2c62cc9c7 こちらの記事の $ cat /etc/systemd/system/puma_$APP_NAME_production.service [Unit] Description=Puma HTTP Server for $APP_NAME (production) After=network.target [Service] Type=simple User=**** WorkingDirectory=/var/www/$APP_NAME/current # Support older bundler versions where file descriptors weren't kept # See https://github.com/rubygems/rubygems/issues/3254 ExecStart=/home/user ExecReload=/bin/kill -USR1 $MAINPID StandardOutput=append:/var/www/$APP_NAME/shared/log/puma_access.log StandardError=append:/var/www/$APP_NAME/shared/log/puma_error.log Restart=always RestartSec=1 SyslogIdentifier=puma [Install] WantedBy=multi-user.target というファイルをそもそも作成していなかったのですが、それは何か関係ありますでしょうか?
TaichiYanagiya

2022/12/13 03:53

puma プロセスを再起動すればいいと思います。 事前にソケットファイルを削除する必要があるかもしれません。 systemd サービスは OS 起動じに puma プロセスを自動起動するためのものです。 手動で起動して正常動作を確認してからでいいと思います。
taniyan512

2022/12/14 08:49

>puma プロセスを再起動すればいいと思います こちらはbundle exec pumactl startのことでよろしいでしょうか。 お伝えしておりませんでしたが、以前から手動でpumaを起動すればアプリは立ち上がる状態です! しかし、ポートフォリオとして公開したいので常にアプリが見れるようにしておきたいという意図です。 しかし、現在は手動でpumaを立ち上げると、そのうちssh接続が切れてアプリも見れなくなり502 Bad Gatewayが発生しております。EC2を立ち上げると同時に永続的にアプリを見れる方法はどうすればよいでしょうか? 説明不足で申し訳ないです。
taniyan512

2022/12/14 22:13

追記します。pumaを自動起動するにはデーモン化する必要があるということですが、どうすればいいかがわかりません。以下のように/etc/systemd/system/puma_portfolio_production.serviceを設定しているのですが、どこかおかしな点ありますでしょうか? [Unit] Description=Puma HTTP Server for portfolio (production) After=network.target [Service] Type=simple User=**** WorkingDirectory=/var/www/portfolio # Support older bundler versions where file descriptors weren't kept # See https://github.com/rubygems/rubygems/issues/3254 ExecStart=/home/tanidatakumi/.rbenv/bin/rbenv exec bundle exec --keep-file-descriptors puma -C /var/www/portfolio/shared/puma.rb ExecReload=/bin/kill -USR1 $MAINPID StandardOutput=append:/var/www/portfolio/shared/log/puma_access.log StandardError=append:/var/www/portfolio/shared/log/puma_error.log Restart=always RestartSec=1 SyslogIdentifier=puma [Install] WantedBy=multi-user.target
TaichiYanagiya

2022/12/15 23:28

> 手動でpumaを起動すればアプリは立ち上がる状態です 手動で起動すれば Nginx から Connection refused にならずに正常に接続できるのですか? であれば、この質問の回答は「Nginx の設定は正しい。puma プロセスを手動で起動してください。」です。 「systemd サービスが自動起動しない」ということであれば、別の質問にした方がいいと思います。 その際、"systemctl restart puma_portfolio_production.service" で起動するか、"systemctl status puma_portfolio_production.service -l" やログの出力を記載するといいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問