0
0

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】【Rails】MySQL8.0にしたらログが出力されなくなったので解決した話

Last updated at Posted at 2021-06-12

以前自分はMySQL5.7のイメージを使ってdbコンテナを立ち上げて、開発してました。

その時は

docker-compose up

を実行したら

rails sみたいな

eb_1              | Started GET "/" for 172.20.0.1 at 2021-06-12 13:36:48 +0000
web_1              | Cannot render console from 172.20.0.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1
web_1              | Processing by DrinksController#index as HTML
web_1              |   User Load (0.4ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 7 LIMIT 1
web_1              |   ↳ app/helpers/sessions_helper.rb:52:in `current_user'
web_1              |    (0.6ms)  SELECT COUNT(*) FROM `drinks` WHERE `drinks`.`user_id` != 6 AND (user_id IN (SELECT followed_id FROM relationships WHERE follower_id = 7) OR user_id = 7)
web_1              |   ↳ app/controllers/drinks_controller.rb:14:in `index'
web_1              | 
web_1              | From: /coffee_passport/app/controllers/drinks_controller.rb:25 DrinksController#index:

こんな感じのログが出てくれました。

ある日、本番環境がMySQL8系なので、
開発環境もMySQL8.0に統一した方がバグもすくなるなると考えて

docker-compose.yml

version: '3'
services:
  db:
    image: mysql:8.0.21
    cap_add:
     - SYS_NICE
      # コンテナにLinux機能を追加するオプションのようです。SYS_NICEは、プロセスの優先度(nice値)をあげます。
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_HOST: db
    ports:
      - '3306:3306'
    volumes:
      - mysql-data:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password # 認証方式を8系以前のものにする

 このように書き換えて再度ビルドし

docker-compose up

を実行すると

rails sみたいなログが出力されなくなってしまいました。

これはかなり不便なので色々調べると
googleの3ページ目に
http://hotatekun.hatenablog.com/entry/2021/04/04/224001
こんな感じの記事がありました。

puma.rb

# workers ENV.fetch("WEB_CONCURRENCY") { 2 }

# Use the `preload_app!` method when specifying a `workers` number.
# This directive tells Puma to first boot the application and load code
# before forking the application. This takes advantage of Copy On Write
# process behavior so workers use less memory.
#
# preload_app!

# Allow puma to be restarted by `rails restart` command.
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

どうしてpuma.rbをこのように編集したか覚えてないのですが、

puma.rb

# stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true
unless ENV.fetch("RAILS_ENV", "development") == "development"
  stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true
end
# puma.rbで、標準出力が log/puma.stdout.log にリダイレクトされていたのが原因だった。
# 開発環境ではファイルにリダイレクトしない形にしたらコンソールが表示されるようになった。

と変更することで

docker-compose up

を実行したら
ターミナルにrails sみたいなログが出力されるようになりました。

docker-compose up -d

が主流?みたいですが皆様は普段どんな感じでログを見てるか気になるところです。

binding.pryで処理は止まって

web_1              |     17:                  .includes(:user))
web_1              |     18: 
web_1              |     19:   @title = 'Timeline'
web_1              |     20: 
web_1              |     21:   @selected = 'Selected'
web_1              |     22: 
web_1              |     23:   @random_drinks = Drink.order('RAND()').limit(5)
web_1              |     24: 
web_1              |  => 25:   binding.pry
web_1              |     26:   
web_1              |     27: end

このように表示されますが、
こっから何を入力しても反応がないので
これからまたどうやってbinding.pryをしようかちゃんと調べて記事にします。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?