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

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

新規登録して質問してみよう
ただいま回答率
86.12%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

nginx

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

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を用いない構成がデフォルトになっています。

解決済

Rails本番環境で発生する[bundler: failed to load command: puma (/usr/local/bundle/bin/puma)]を解決したい

senseIY
senseIY

総合スコア277

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

nginx

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

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を用いない構成がデフォルトになっています。

1回答

0リアクション

1クリップ

448閲覧

投稿2022/08/25 04:12

編集2022/08/25 05:32

前提

現在こちらのサイトを参考にdocker-compose を使用してバックエンド側(Rails7系 APIモード)とフロントエンド側(React TypeScript)で開発したポートフォリオをAWSにデプロイしようとしています。現在サイトの通りに、一旦ローカル環境でRailsが本番環境で正常に作動するかチェックをしています。しかし、以下のエラーが発生してしまいます。

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

yml

api_1 | ! Unable to load application: I18n::InvalidLocaleData: can not load translations from /usr/local/bundle/bundler/gems/devise_token_auth-1a0483fbd125/config/locales/ja.yml: #<Psych::SyntaxError: (<unknown>): did not find expected key while parsing a block mapping at line 20 column 7> api_1 | bundler: failed to load command: puma (/usr/local/bundle/bin/puma) api_1 | /usr/local/bundle/gems/i18n-1.12.0/lib/i18n/backend/base.rb:254:in `rescue in load_yml': can not load translations from /usr/local/bundle/bundler/gems/devise_token_auth-1a0483fbd125/config/locales/ja.yml: #<Psych::SyntaxError: (<unknown>): did not find expected key while parsing a block mapping at line 20 column 7> (I18n::InvalidLocaleData)

docker-compose.production.yml(本番環境用)

yml

version: "3.3" services: api: build: context: ./backend/ dockerfile: Dockerfile command: bash -c "rm -f tmp/pids/server.pid && bundle exec puma -C config/puma.rb -e production" volumes: - ./backend:/myapp - ./backend/vendor/bundle:/myapp/vendor/bundle environment: TZ: Asia/Tokyo RAILS_ENV: production # ports: # - "3001:3000" depends_on: - db stdin_open: true tty: true env_file: - .env user: root front: build: context: ./frontend/ dockerfile: Dockerfile volumes: - ./frontend/app:/usr/src/app command: sh -c "yarn && yarn start" ports: - "4000:3000" environment: - WDS_SOCKET_PORT=0 db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} command: --default-authentication-plugin=mysql_native_password volumes: - mysql-data:/var/lib/mysql - /tmp/dockerdir:/etc/mysql/conf.d/ ports: - "3306:3306" cap_add: - SYS_NICE web: build: context: backend/containers/nginx volumes: - public-data:/myapp/public - tmp-data:/myapp/tmp ports: - 80:80 depends_on: - api volumes: db: driver: local public-data: tmp-data: log-data: mysql-data:

Dockerfile(backend rails)

Docker

FROM ruby:3.1.2-buster RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs yarn default-mysql-client ENV RAILS_ENV=production ENV APP_PATH /myapp RUN mkdir $APP_PATH WORKDIR $APP_PATH COPY Gemfile $APP_PATH/Gemfile COPY Gemfile.lock $APP_PATH/Gemfile.lock RUN bundle install COPY . $APP_PATH # Add a script to be executed every time the container starts. COPY entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] EXPOSE 3000 # Start the main process. RUN mkdir -p tmp/sockets RUN mkdir -p tmp/pids CMD ["rails", "server", "-b", "0.0.0.0"]

puma.rb

rb

threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i threads threads_count, threads_count port ENV.fetch("PORT") { 3000 } environment ENV.fetch("RAILS_ENV") { "production" } # environment ENV.fetch("RAILS_ENV") { "development" } plugin :tmp_restart app_root = File.expand_path("../..", __FILE__) bind "unix://#{app_root}/tmp/sockets/puma.sock" stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true

試したこと

https://github.com/lynndylanhurley/devise_token_auth/pull/1550/files
どうやら、gem devise_token_auth のコミット 1a0483fbd125 の ja.yml には構文ミスがあり、8月20日に修正されているようです。
しかし、私の場合、エラーが直りませんでした。githubの修正箇所を確認しましたが、24行目の修正がされているようです。
私のエラーメッセージを見ると、「line 20 column 7」とあるので関係性が分かりませんでした。ここで以下のことを試みました。

1 devise_token_authのバージョン確認

 最新のgithubに上がっているバージョンを確認しましたが、1.2.0が最新の状態だと思われます。
https://qiita.com/sayama0402/items/c0ecd9adc141df4b2b60
こちらの記述にもありますが、Rails7系を使う場合
gem 'devise_token_auth', '>= 1.2.0', git: "https://github.com/lynndylanhurley/devise_token_auth"
のように指定している(する必要がある)ので、私のdevise_token_auth'は最新で、恐らく修正が反映されているはずです。しかし、なぜかエラーが出てしまっている状態です。

2 docker-compose.production.ymlのパスを確認

yml

command: bash -c "rm -f tmp/pids/server.pid && bundle exec puma -C config/puma.rb -e production"

ここのコマンドの
bundle exec puma -C config/puma.rb -e production
という部分が私のディレクトリ構造と違うため以下のように書き直しました。

yml

command: bash -c "rm -f tmp/pids/server.pid && bundle exec puma -C ./backend/config/puma.rb -e production"

しかし、エラーが発生してしまいました。

yml

api_1 | bundler: failed to load command: puma (/usr/local/bundle/bin/puma) api_1 | /usr/local/bundle/gems/puma-5.6.4/lib/puma/dsl.rb:83:in `read': No such file or directory @ rb_sysopen - ./backend/config/puma.rb (Errno::ENOENT)

エラーから推測するにどうやら修正した./backend/config/puma.rbというパスが間違っている?ようです。docker-compose.production.ymlからpuma.rbファイルをみた場合、修正したパスの方が正しいはずなのですが、どうやら修正前の方で正常に動いている?ようです。*もしかするとこちらのパスが合っていて次の新しいエラーが出ているのかもしれないと思い、./backendddd/config/puma.rbのように存在しないパスを指定してみたのですが、同じエラーが出ました。よってパスの問題ではないように見えます。

3ローカル環境での起動

 ローカル環境では正常に動作します。本番環境用との違いはnginxを入れたことくらいです。ちなみにweb(nginx)は起動はします。しかし、すぐにrailsのコンテナがエラー(上と同じ)を吐きすぐに停止してしまいます。

そのため、nginxの画面に行ってもBad Gatewayになってしまい、railsとnginxのコンテナが正常に動いているかどうか分かりません。ですが、

yml

senseiy@senseIY-wsl:~/Studio/reDictum_ver-2.0$ docker-compose -f docker-compose.production.yml exec web nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful senseiy@senseIY-wsl:~/Studio/reDictum_ver-2.0$ docker-compose -f docker-compose.production.yml exec web curl example.com <!doctype html> <html> <head> <title>Example Domain</title> <meta charset="utf-8" /> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <style type="text/css"> body { background-color: #f0f0f2; margin: 0; padding: 0; font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; } div { width: 600px; margin: 5em auto; padding: 2em; background-color: #fdfdff; border-radius: 0.5em; box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02); } a:link, a:visited { color: #38488f; text-decoration: none; } @media (max-width: 700px) { div { margin: 0 auto; width: auto; } } </style> </head> <body> <div> <h1>Example Domain</h1> <p>This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.</p> <p><a href="https://www.iana.org/domains/example">More information...</a></p> </div> </body> </html>

この結果からnginxは作動はしていると考えました。つまり、今起きているのはpumaコマンドを読み込まないというエラーとなぜか発生するymlのシンタックスエラーのみ(これから追加で出てくるかもしれませんが)になります。また、この時

wsl

docker-compose -f docker-compose.production.yml up

のように動かしています。
また、RAILS_ENV=productionをつけても($ docker-compose -f docker-compose.production.yml run api RAILS_ENV=produc
tion)

/usr/bin/entrypoint.sh: line 8: exec: RAILS_ENV=production: not found

のようになります。

なぜかファイルエラーが出てしまう

イメージ説明

このファイルを削除してもエラーは変わりませんでした。
・何かしらアドバイスがあればよろしくお願いいたします。

追記

yml

api_1 | /usr/local/lib/ruby/3.1.0/psych.rb:455:in `parse': (<unknown>): did not find expected key while parsing a block mapping at line 20 column 7 (Psych::SyntaxError)

というエラーも出ていました。こちらもline 20 column 7 (Psych::SyntaxError)というymlのシンタックスエラーのようです。しかし、私のローカル環境には/usr/local/lib/ruby/3.1.0/psych.rbというファイルは見つかりませんでした。また、line 20 column 7とあるので先に示したdevise_token_authのエラーともなにかしら関係があるかもしれません。
ですが、もしdevise_token_authのエラーならばローカル環境でも同じエラーが出るはずです。ローカル環境でこのエラーは確認できませんでした。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

nginx

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

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を用いない構成がデフォルトになっています。