7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Docker】development.logやtest.log出力されない【Rails】

Last updated at Posted at 2020-12-09

Rails+Docker+puma+nginx+MySQLで開発をしていたときのことです。通常、開発環境やテスト環境のログは、log/development.loglog/test.logに表示されるのですが、なぜかログが表示されず、空のままという現象が起こりました。

ログが見れないというのは致命的です!!

至急解決したかったのですが、ググって調べても意外と情報がでてこず、かなり時間を費やしてしまったので、私の二の舞を防ぐためにも、ここで共有させて頂きたいと思います。

また、RSpecのシステムスペックだと、テスト失敗時にtmp/screenshotsに自動でスクリーンショットが保存されるのですが、それも表示されないといった状況でしたが、これも同じ解決方法で解決することができました。

解決方法

非常に簡単です。
docker-compose.ymlの設定を変更するだけです。

変更前に使用していたdocker-compose.yml

version: '3'
services:
  app:
    build:
      context: .
    env_file:
      - ./environments/db.env
    command: bundle exec puma -C config/puma.rb
    volumes:
      - .:/webapp
      - public-data:/webapp/public
      - tmp-data:/webapp/tmp
      - log-data:/webapp/log
    depends_on:
      - db
  db:
    image: mysql:5.7
    env_file:
      - ./environments/db.env
    volumes:
      - db-data:/var/lib/mysql
  web:
    build:
      context: containers/nginx
    volumes:
      - public-data:/webapp/public
      - tmp-data:/webapp/tmp
    ports:
      - 80:80
    depends_on:
      - app
volumes:
  public-data:
  tmp-data:
  log-data:
  db-data:

変更後のdocker-compose.yml


version: '3'
services:
  app:
    build:
      context: .
    command: bundle exec puma -C config/puma.rb
    volumes:
      - .:/webapp
      - public-data:/webapp/public
      - tmp-data:/webapp/tmp/sockets
      - log-data:/var/log/nginx # 変更
    depends_on:
      - db
      - 
  db:
    image: mysql:5.7
    volumes:
      - db-data:/var/lib/mysql

  web:
    build:
      context: containers/nginx
    volumes:
      - tmp-data:/webapp/tmp/sockets
      - public-data:/webapp/public
    ports:
      - 80:80
    depends_on:
      - app

volumes:
  db-data:
  tmp-data:
    driver: local # 追加
  public-data:
  log-data:
    driver: local # 追加

log-dataのマウント先を/var/log/nginx変更し、tmp-datalog-datadriver: localを記述します。
このように記述を変更したら、ログもスクリーンショットも表示されるようになりました。

driverでは、「ボリューム・ドライバがどのボリュームを使うべきか」を指定することができます。
指定先をlocalとすると文字通りホスト上のローカルのファイルシステムにボリュームが作成されます。
(ちなみに、ファイルシステムというのは、記憶装置に保存されたデータを管理したり、操作するために必要な機能で、これはOSによって提供されている機能です。)

しかし、ドキュメントを見るとデフォルトでlocalになっているようなので、記述する必要はなさそうに思えます。が、事実としてこれを明示的に記述しないとログは表示されませんでした。
このあたりのことがわかるかたがいましたら是非コメントいただけますと嬉しいです :bow:
参考: https://docs.docker.jp/compose/compose-file.html?highlight=compose#driver

最後まで読んでいただきありがとうございます!

学んだことを日々アウトプットしております!ご指摘などございましたら、是非コメントいただけますと嬉しいです!

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?