現在DockerでRailsの環境構築が完了し、個人アプリ開発を始めたのですがソースコードの変更がコンテナを再起動しないと即時反映されないです。
「本来ホスト側とコンテナは切り離されていて一度コンテナを立ち上げてしまうとホスト側の変更はコンナには反映されない。
対策として、docker-compose.ymlでホスト上のディレクトリをvolumeとしてコンテナにマウントすればホスト側の変更がコンテナ内に即時反映されるようになる。(docker-compose.ymlの下から5行目)」
という理解なのですが、volume の設定が間違っているのでしょうか?それともほかの場所が間違っているのでしょうか?
ググってもあまり情報がでてこず困っております。
環境
- windows10 Pro
- Ruby on Rails 6
以下原因があると思われるファイルのソースコードを記載させていただきます。
Dockerfile
FROM ruby:2.7 RUN apt-get update -qq && apt-get install -y nodejs yarnpkg RUN ln -s /usr/bin/yarnpkg /usr/bin/yarn RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock RUN bundle install COPY . /app # 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. CMD ["rails", "server", "-b", "0.0.0.0"]
docker₋compose.yml
version: "3" services: db: image: mysql:8.0 volumes: - ./tmp/db:/var/lib/mysql environment: - MYSQL_ALLOW_EMPTY_PASSWORD=1 web: build: . command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - .:/app //ここでマウントしていると解釈してます ports: - "3000:3000" depends_on: - db
entroypoint.sh
#!/bin/bash set -e # Remove a potentially pre-existing server.pid for Rails. rm -f /app/tmp/pids/server.pid # Then exec the container's main process (what's set as CMD in the Dockerfile). exec "$@"
##試したこと
開発環境用の設定ファイルである config/environments/development.rb を編集し、以下の記述を加え、docker₋compose restartやdocker-compose down buildなどしてみたが変わらない。
development.rb
Rails.application.configure do ~ config.reload_classes_only_on_change = false end
ご教授いただけると幸いです。
回答2件
あなたの回答
tips
プレビュー