🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Ruby on Rails 7

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

Q&A

0回答

352閲覧

Docker+RailsAPI+ReactでReactからAPIへの接続がERR_EMPTY_RESPONSEになってしまう

TakagiMarin

総合スコア13

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Ruby on Rails 7

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

0グッド

0クリップ

投稿2023/03/04 22:37

実現したいこと

  • Reactのコード内からRailsAPIに接続してデータを取得したい

前提

DockerとReactの練習のため、Docker+RailsAPI+Reactで簡単なwebアプリを作っています。
Reactのコード内からAPIに接続する段階で、ERR_EMPTY_RESPONSEとなってしまい接続できません。

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

GET http://localhost:3001/api/v1/pages net::ERR_EMPTY_RESPONSE Uncaught (in promise) Error: Minified React error #321; visit https://reactjs.org/docs/error-decoder.html?invariant=321 for the full message or use the non-minified dev environment for full errors and additional helpful warnings.

該当のソースコード

Dockerfile:api

1FROM ruby:3.1.3 2RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ 3 && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ 4 && apt-get update -qq \ 5 && apt-get install -y nodejs yarn \ 6 && mkdir /my_dictionary_api 7WORKDIR /my_dictionary_api 8COPY Gemfile /my_dictionary_api/Gemfile 9COPY Gemfile.lock /my_dictionary_api/Gemfile.lock 10RUN gem update --system 11RUN bundle install 12COPY . /my_dictionary_api 13 14COPY entrypoint.sh /usr/bin/ 15RUN chmod +x /usr/bin/entrypoint.sh 16ENTRYPOINT ["entrypoint.sh"] 17EXPOSE 3001

Dockerfile:front

1FROM node:17.2 2RUN mkdir /my_dictionary_front 3WORKDIR /my_dictionary_front

docker_compose.yml

1version: '3.8' 2services: 3 db: 4 platform: linux/x86_64 5 image: mysql:8.0 6 environment: 7 MYSQL_ROOT_PASSWORD: dictionary 8 ports: 9 - 3306:3306 10 command: --default-authentication-plugin=mysql_native_password 11 volumes: 12 - mysql-data:/var/lib/mysql 13 api: 14 build: ./api 15 command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3001 -b '0.0.0.0'" 16 volumes: 17 - ./api:/my_dictionary_api 18 - gem_data:/usr/local/bundle 19 ports: 20 - "3001:3000" 21 depends_on: 22 - db 23 stdin_open: true 24 tty: true 25 front: 26 build: ./front 27 command: yarn start 28 ports: 29 - "3000:3000" 30 volumes: 31 - ./front:/my_dictionary_front 32 depends_on: 33 - api 34 35volumes: 36 mysql-data: 37 gem_data: 38 driver: local

javascript

1//client.js 2 3import applyCaseMiddleware from 'axios-case-converter'; 4import axios from 'axios'; 5 6const options = { 7 ignoreHeaders: true 8} 9 10const client = applyCaseMiddleware( 11 axios.create({ 12 baseURL: "http://localhost:3001/api/v1", 13 }), 14 options 15) 16 17export default client

javascript

1//pages.js 2 3import client from './client'; 4export const Top = () => { 5 return client.get('/pages'); 6}

ruby

1#pages_controller.rb 2 3class Api::V1::PagesController < ApplicationController 4 def index 5 test_json = { 6 data: [ 7 {id: 1, title: 'first text', text: '最初のテキスト'}, 8 {id: 2, title: 'second text', text: '2行目のテキスト'} 9 ] 10 } 11 12 render json: test_json 13 end 14end

ruby

1#cors.rb 2 3Rails.application.config.middleware.insert_before 0, Rack::Cors do 4 allow do 5 origins "localhost:3001" 6 7 resource "*", 8 headers: :any, 9 methods: [:get, :post, :put, :patch, :delete, :options, :head] 10 end 11end

試したこと

  • corsを設定しました
  • docker psで確認してみましたが、問題点がわかりませんでした
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8b8e4889c354 dictionary_front "docker-entrypoint.s…" 4 hours ago Up 3 minutes 0.0.0.0:3000->3000/tcp dictionary_front_1 e2010b11a04c dictionary_api "entrypoint.sh bash …" 4 hours ago Up 3 minutes 3001/tcp, 0.0.0.0:3001->3000/tcp dictionary_api_1 095a584316a3 mysql:8.0 "docker-entrypoint.s…" 4 hours ago Up 3 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp dictionary_db_1
  • apiコンテナ内でcurlしてみましたが、こちらは正常にアクセスできました
root@e2010b11a04c:/my_dictionary_api# curl http://localhost:3001/api/v1/pages {"data":[{"id":1,"title":"first text","text":"最初のテキスト"},{"id":2,"title":"second text","text":"2行目のテキスト"}]}root@e2010b11a04c:/my_dictionary_api#
  • エラーのMinified React error #321について、reactが2回呼ばれているところがないか確認しましたが、ありませんでした

補足情報(FW/ツールのバージョンなど)

  • Ruby 3.1.3
  • Rails 7.0.4.2
  • React 18.0.0
  • axios 1.3.2

よろしくお願いいたします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問