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

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

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

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」という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というインフラから提供する商用サービスです。

Q&A

解決済

1回答

490閲覧

RailsアプリをAWSにデプロイする際、puma.sockが作られない。

gomes_2222

総合スコア90

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」という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というインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2023/04/13 14:22

編集2023/04/13 17:34

実現したいこと

Rails + NginxのアプリをAWS Fargateでデプロイしたいです。

前提

AWSFargateを使用。
タスク定義(サービス)は1つで、その中にnginxコンテナとrailsコンテナ(puma)の2つを含んでいます。
サービス起動したところ、デプロイ自体は成功し、AWS上のコンテナも動いている。
しかし、いざアプリをパブリックIPでみようとしたら、nginxの502 Bad Gatewayの
エラーが出ました。

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

ECSのサービスのログを見ると、nginxのコンテナで以下のエラー

connect() to unix:///myapp/tmp/sockets/puma.sock failed (2: No such file or directory) while connecting to upstream

さらにAWS上に存在するコンテナの中をECS Execを使って覗きました。
下記の通り、ディレクトリまでは存在を確認しましたが、肝心のpuma.sockがあるべきところになかったです。

nginxコンテナ

1#以下コマンドでnginxコンテナ内に入る。 2% aws ecs execute-command \ 3--cluster xxxx \ 4--task xxxxx \ 5--container nginx \ 6--interactive \ 7--command "bash" 8 9#lsコマンドでファイル一覧を表示。myappディレクトリ確認 10% ls 11・・・ myapp ・・・ 12 13#socketsディレクトリへ移動 14% cd myapp/tmp/sockets 15 16#lsコマンドでファイル一覧を表示。何も表示されなかった。 17sockets % ls 18sockets %

railsコンテナ

1#以下コマンドでrailsコンテナ内に入る。 2% aws ecs execute-command \ 3--cluster xxxx \ 4--task xxxxx \ 5--container rails \ 6--interactive \ 7--command "bash" 8 9#lsコマンドでファイル一覧を表示。tmpディレクトリ確認 10myapp % ls 11・・・ tmp ・・・ 12 13#socketsディレクトリへ移動 14myapp% cd tmp/sockets 15 16#lsコマンドでファイル一覧を表示。何も表示されなかった。 17tmp/sockets % ls 18tmp/sockets %

該当のソースコード

DockerFile(Rails)

1FROM ruby:3.1.1 2 3RUN apt-get update && apt-get install -y curl apt-transport-https wget && \ 4curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ 5echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ 6apt-get update && apt-get install -y yarn 7 8RUN apt-get update -qq && apt-get install -y build-essential yarn 9RUN apt-get install -y nodejs npm && npm install n -g && n 16 10 11RUN mkdir /myapp 12WORKDIR /myapp 13COPY Gemfile /myapp/Gemfile 14COPY Gemfile.lock /myapp/Gemfile.lock 15 16RUN bundle install 17COPY . /myapp 18 19RUN yarn install --check-files 20 21COPY entrypoint.sh /usr/bin/ 22RUN chmod +x /usr/bin/entrypoint.sh 23ENTRYPOINT ["sh", "entrypoint.sh"] 24 25RUN mkdir -p myapp/tmp/sockets 26 27# for aws 28VOLUME /myapp/public 29VOLUME /myapp/tmp 30 31#第一パターン→失敗 32#CMD /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec puma -C config/puma.rb" 33 34EXPOSE 3000 35#第二パターン→失敗 36CMD bash -c "bundle exec puma -C config/puma.rb"

puma.rb

1worker_timeout 3600 if ENV.fetch("RAILS_ENV", "development") == "development" 2 3port ENV.fetch("PORT") { 3000 } 4 5environment ENV.fetch("RAILS_ENV") { "development" } 6 7pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" } 8 9app_root = File.expand_path("../..", __FILE__) 10bind "unix://#{app_root}/tmp/sockets/puma.sock" 11 12stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true 13

nginx.conf

1upstream myapp { 2 # 転送先のurl 3 server unix:///myapp/tmp/sockets/puma.sock; 4} 5 6server { 7 listen 80; 8 server_name localhost ssagara-communication-board.com; 9 10 access_log /var/log/nginx/access.log; 11 error_log /var/log/nginx/error.log; 12 #ドキュメントルート 13 root /myapp/public; 14 15 client_max_body_size 100m; 16 error_page 404 /404.html; 17 error_page 505 502 503 504 /500.html; 18 try_files $uri/index.html $uri @myapp; 19 keepalive_timeout 5; 20 21 location @myapp { 22 proxy_set_header X-Real-IP $remote_addr; 23 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 24 proxy_set_header Host $http_host; 25 proxy_pass http://myapp; 26 } 27}

なお、バインドマウントについて。
railsのdockerFileの下部にVOLUMEで指定をしている、
またECSのタスク定義で、nginxのコンテナには以下の設定してます。

"volumesFrom": [ { "sourceContainer": "rails" } ],

試したこと

何回かDockerFile末尾のコマンドを作り替えつつ、動かしてますが今のところ進歩なしです。
なぜpuma.sockが作られないんでしょうか。
もしかして、ECSのタスク定義やサービスの設定側の問題の可能性はありますか?
今のところ、railsのdockerfileのコマンドのミスもしくはpuma.rbの記述ミスで、puma.sock作られないのかと考えてます。

ちなみに、ローカルでは下記docker-compose.ymlを使って正常に動作してます。

services: app: build: . command: bash -c "bundle exec puma -C config/puma.rb" volumes: - .:/myapp - public-data:/myapp/public - tmp-data:/myapp/tmp ports: - "3000:3000" depends_on: - db web: build: nginx volumes: - public-data:/myapp/public - tmp-data:/myapp/tmp ports: - "80:80" depends_on: - app

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

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

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

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

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

yu_1985

2023/04/13 16:21

> nginxどころか、railsコンテナの方にもpuma.sockが作られてないことがわかりました。 両者は別のコンテナで動かしているということでいいですか。 作られてない、とのことですがそれをどのように確認したか、具体的にコマンドと出力結果を貼ってみてください。 あと、そもそもきちんとRailsコンテナでアプリが起動しているか、確認結果がわかるように貼ってください。 また、この質問の事象だとまだ関係はなさそうですが、きちんと双方のコンテナにバインドマウントをしていることを確認してください。 それをしていないとそれらのコンテナ間でファイルを共有できません。 ちなみに、ソケットファイルを使わずに別コンテナを参照する方法もありますが一旦それは割愛します。
gomes_2222

2023/04/13 17:36

早速のコメントありがとうございます。 修正し、現在の状況を補足しました。 >きちんと双方のコンテナにバインドマウントをしていることを確認してください。 これについてだけ、もしかしたら現状の設定ではnginxにしかマウントの記述してないかもです。
yu_1985

2023/04/14 07:13

ECSのタスク定義を省かずに載せてほしいのですが、文字数オーバーしますかね…。 タスク定義はnginxとRailsのコンテナを同じタスク内に定義していますか?
yu_1985

2023/04/14 10:04

あと、そもそもコンテナ内でpumaがきちんと起動していますか。 タスク実行時のログにはどう出ていますか。
gomes_2222

2023/04/18 10:12

無事解決しました。 コメントありがとうございました。 当初、何やっても直らないと思ってたのですが、「コンテナ内でpumaがきちんと起動」をヒントに、 きちんとログでpumaの起動を確認したうえで、あらためて確認することでpuma.sock作成を確認できました。 冷静にログを見ることが大事でした。 ありがとうございました。
guest

回答1

0

自己解決

puma.rbのポート番号に関するところをコメントアウトして解決。

また、コンテナが起動後、puma起動をしっかり待ってから確認することで解決しました。

投稿2023/04/18 10:11

gomes_2222

総合スコア90

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.45%

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

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

質問する

関連した質問