現状
現在AWS(amazon linux2)にRailsアプリをデプロイして動作させようとしています。
Docker+Rails+AWS(EC2+RDS)を使ってデプロイした - Qiita を参考に進めていますが、
下記コマンドでデータベースを作成したいのですが作成できません。
docker-compose exec web rails db:create RAILS_ENV=production -f /var/www/rails/app_for_job_change/docker-compose.production.yml
調べるために、
docker-compose ps -a
を実行すると、railsアプリのコンテナが起動できていないことが分かり、
docker logs
で調べると
Errno::ENOENT: No such file or directory - connect(2) for /webapp/tmp/sockets/puma.sock
とエラーを吐いていました。
Ruby on Rails - 【Rails】Pumaが起動出来ない問題|teratail
が一番近そうだったので参考にして socketsフォルダを作成してみましたが以前railsアプリのコンテナは起動することができません。(m_ _m)
もしわかる方がいらっしゃればご教授いただきますようよろしくお願いいたします(m_ _m)
期待する動作
- railsアプリのコンテナが問題なく起動すること
- railsのdb作成コマンドが実行できDBが作成できること
動作環境
Rails | AWS |
---|---|
Ruby: 2.7.2 | Amazon linux2 |
Rails: 6.0.3.5 | EC2 |
- | nginx |
- | RDS(MySQL) |
ディレクトリ構成
. ├── app ├── bin ├── config │ ├── puma.rb ├── containers │ └── nginx │ └── Dockerfile │ └── nginx.conf ├── db ├── lib ├── log │ └── nginx ├── node_modules ├── public ├── spec ├── tmp │ ├── cache │ ├── pids │ └── sockets └── vendor └── docker-compose.production.yml └── docker-compose.yml └── Dockerfile └── Dockerfile.production
参考にしたサイト
デプロイするために参考にしたサイトです。
Docker+Rails+AWS(EC2+RDS)を使ってデプロイした - Qiita
エラー内容
docker-compose exec web rails db:create RAILS_ENV=production -f /var/www/rails/app_for_job_change/docker-compose.production.yml
を実行すると下記のログが表示されました。
bash
1ERROR: No container found for web_1
- Dockerコンテナの起動状態を
docker ps -a
で確認したところ下記のログが表示されました。
bash
1CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 287d36249bd33 app_for_job_change_nginx "/docker-entrypoint.…" 2 days ago Up About an hour 0.0.0.0:80->80/tcp app_for_job_change_nginx_1 30c18a09d94d9 app_for_job_change_web "bundle exec puma -C…" 2 days ago Exited (1) About a minute ago app_for_job_change_web_1
docker logs 0c18a09d94d9
で調べたところ直近で下記のログが表示されました。
bash
1Puma starting in single mode... 2* Puma version: 5.2.1 (ruby 2.7.2-p137) ("Fettisdagsbulle") 3* Min threads: 5 4* Max threads: 5 5* Environment: production 6* PID: 1 7* Listening on http://0.0.0.0:3000 8bundler: failed to load command: puma (/usr/local/bundle/bin/puma) 9Errno::ENOENT: No such file or directory - connect(2) for /webapp/tmp/sockets/puma.sock 10 /usr/local/bundle/gems/puma-5.2.1/lib/puma/binder.rb:373:in `initialize' 11 /usr/local/bundle/gems/puma-5.2.1/lib/puma/binder.rb:373:in `new' 12 /usr/local/bundle/gems/puma-5.2.1/lib/puma/binder.rb:373:in `add_unix_listener' 13 /usr/local/bundle/gems/puma-5.2.1/lib/puma/binder.rb:208:in `block in parse' 14 /usr/local/bundle/gems/puma-5.2.1/lib/puma/binder.rb:152:in `each' 15 /usr/local/bundle/gems/puma-5.2.1/lib/puma/binder.rb:152:in `parse' 16 /usr/local/bundle/gems/puma-5.2.1/lib/puma/runner.rb:144:in `load_and_bind' 17 /usr/local/bundle/gems/puma-5.2.1/lib/puma/single.rb:44:in `run' 18 /usr/local/bundle/gems/puma-5.2.1/lib/puma/launcher.rb:181:in `run' 19 /usr/local/bundle/gems/puma-5.2.1/lib/puma/cli.rb:80:in `run' 20 /usr/local/bundle/gems/puma-5.2.1/bin/puma:10:in `<top (required)>' 21 /usr/local/bundle/bin/puma:23:in `load' 22 /usr/local/bundle/bin/puma:23:in `<top (required)>'
関係がありそうなコード
containers/nginx/nginx.conf(1/4)
# containers/nginx/nginx.conf upstream webapp { server unix:///webapp/tmp/sockets/puma.sock; } server { listen 80; server_name www.xxx.yyy.zzz; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; root /webapp/public; client_max_body_size 100m; error_page 404 /404.html; error_page 505 502 503 504 /500.html; try_files $uri/index.html $uri @webapp; keepalive_timeout 5; location @webapp { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://webapp; } }
config/puma.rb(2/4)
ruby
1# config/puma.rb 2threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i 3threads threads_count, threads_count 4port ENV.fetch("PORT") { 3000 } 5environment ENV.fetch("RAILS_ENV") { "development" } 6pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" } 7plugin :tmp_restart 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
Dockerfile.production(3/4)
docker
1# Dockerfile.production 2ARG RUBY_VERSION=2.7.2 3ARG BUNDLER_VERSION=2.1.4 4 5FROM ruby:${RUBY_VERSION} 6 7ENV LANG C.UTF-8 8ENV APP_DIR /webapp 9 10ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE yes 11EXPOSE 3000 12 13RUN apt-get update -qq && \ 14 apt-get install -y --no-install-recommends \ 15 build-essential \ 16 libpq-dev \ 17 vim \ 18 nodejs 19 20# ENV BUNDLER_VERSION 2.1.4 21# RUN gem install bundler -v ${BUNDLER_VERSION} 22 23RUN apt-get update && apt-get install -y curl apt-transport-https wget && \ 24 curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ 25 echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ 26 apt-get update && apt-get install -y yarn 27 28RUN mkdir ${APP_DIR} 29WORKDIR ${APP_DIR}
docker-compose.production.yml(4/4)
docker
1# docker-compose.production.yml 2services: 3 web: 4 build: 5 context: . 6 dockerfile: ./Dockerfile.production 7 command: bundle exec puma -C config/puma.rb -e production 8 volumes: 9 - .:/webapp 10 - public-data:/webapp/public 11 - tmp-data:/webapp/tmp 12 - log-data:/webapp/log 13 - bundle:/usr/local/bundle 14 - node-modules:/webapp/node_modules 15 # 公開ポートの設定(ホスト(Mac側):コンテナ側) 16 # ports: 17 # - "3000:3000" 18 # - "3035:3035" 19 20 nginx: 21 build: 22 context: . 23 dockerfile: ./containers/nginx/Dockerfile 24 volumes: 25 - public-data:/webapp/public 26 - tmp-data:/webapp/tmp 27 ports: 28 - 80:80 29 depends_on: 30 - web 31 32volumes: 33 bundle: 34 node-modules: 35 public-data: 36 tmp-data: 37 log-data: 38
あなたの回答
tips
プレビュー