発生している問題
RailsAPI+nginx+pumaの構成のサービスをECS(Fargate)にデプロイしました。
RailsコンテナとnginxコンテナはRunningにはなるのですが、nginx側からRails側のpuma.sockファイルを参照できていないエラーが発生しております。
こちらのサイトを参考に、DockerfileにVOLUMEを追加して、タスク定義でRails側のコンテナをマウントするようにしています。
nginxからRailsへの疎通は、Railsコンテナのpublicディレクトリ配下のファイル群を確認しローカと一致したので、疎通はできていると思うのですがtmp配下がローカルと一致しません。
Dcokerfile等確認したのですが原因がわからない為、質問を立てさせていただきました。
エラーメッセージ
connect() to unix:///back/tmp/sockets/puma.sock failed (2: No such file or directory) while connecting to upstream, client: 10.0.2.59, server: localhost, request: "GET /api/v1/health_check HTTP/1.1", upstream: "http://unix:///back/tmp/sockets/puma.sock:/api/v1/health_check", host: "10.0.2.181" "GET /api/v1/health_check HTTP/1.1" 502 157 "-" "ELB-HealthChecker/2.0"
該当のソースコード
puma.rb
threads_count = ENV.fetch('RAILS_MAX_THREADS', 5).to_i threads threads_count, threads_count port ENV.fetch('PORT', 5000) environment ENV.fetch('RAILS_ENV', 'development') plugin :tmp_restart app_root = File.expand_path('..', __dir__) bind "unix://#{app_root}/tmp/sockets/puma.sock" pidfile "#{app_root}/tmp/pids/puma.pid"
default.conf
upstream back { server unix:///back/tmp/sockets/puma.sock; } server { listen 80 default; server_name localhost; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; root /back/public; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header Host $http_host; proxy_pass http://back; } client_max_body_size 100m; # error_page 404 505 502 503 504 /layouts/error.vue; try_files $uri/index.html $uri @back; keepalive_timeout 5; }
nginx:Dockerfile
FROM nginx:1.16 RUN apt-get update && \ apt-get install -y apt-utils \ locales && \ echo "ja_JP.UTF-8 UTF-8" > /etc/locale.gen && \ locale-gen ja_JP.UTF-8 ENV LC_ALL ja_JP.UTF-8 ADD ./nginx/nginx.conf /etc/nginx/nginx.conf ADD ./nginx/default.conf /etc/nginx/conf.d/default.conf EXPOSE 80
Rails:Dockerfile
FROM ruby:2.6.6 RUN curl https://deb.nodesource.com/setup_12.x | bash RUN curl https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list RUN apt-get update -qq && \ apt-get install -y apt-utils \ build-essential \ libpq-dev \ nodejs \ yarn \ vim \ default-mysql-client RUN gem install bundler:2.0.2 ENV TZ Asia/Tokyo ENV LANG C.UTF-8 WORKDIR /back ADD /back/Gemfile . ADD /back/Gemfile.lock . RUN bundle install RUN mkdir -p /back/tmp/pids RUN mkdir -p /back/tmp/sockets RUN yarn install --check-files RUN WEBPACKER_PRECOMPILE=false bundle exec rails assets:precompile VOLUME /back/tmp VOLUME /back/public COPY /back .
試したこと
- public配下は参照できたので、public配下に新しくフォルダを作成し、Fargateで作成したファイルが追加されているか試し、追加したファイルが確認できたのでnginxからRailsへの疎通はできていると判断
- puma.pidファイルを確認し、ps aux | grep puma.pidの番号でserverとupstream_serverの一致を確認
補足情報(FW/ツールのバージョンなど)
ruby 2.6.6
rails 6.0.3
AWS (VPC/ECS Fargate/ECR/RDS/S3/ALB/Route53)

回答1件
あなたの回答
tips
プレビュー