最新の状態
http://hotatekun.hatenablog.com/entry/2021/04/04/224001
この記事を見つけて
今、MySQL8.0に戻して、
puma.rb
に
ruby
1# stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true 2#上の部分は元からあったやつ 3 4unless ENV.fetch("RAILS_ENV", "development") == "development" 5 stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true 6end 7# puma.rbで、標準出力が log/puma.stdout.log にリダイレクトされていたのが原因だった。 8# 開発環境ではファイルにリダイレクトしない形にしたらコンソールが表示されるようになった。
と記述したら
web_1 | 16: .order('created_at DESC') 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 web_1 |
ターミナルにrails sみたいなログが出力されるようになりました。
が、binding.pryで処理が止まるものの、ここから色々入力もできないので
こっから色々やり方を調べたいと思います
前提
https://teratail.com/questions/342548
この質問の続きです。
お手数ですがご確認いただければ幸いです。
doker開発環境でrails sみたいなログを出しながらデバッグもしたいが、ログが出ない
↓
なぜログが出ないか考えた時に、MYSQL5.7から8.0にバージョンアップしたらログが出なくなった記憶が蘇った
↓
MYSQL5.7に戻してログが出たらMySQL8.0に何かしらの問題があると特定できる
↓
docker-compose.ymlを編集して、5.7にしたらエラーが起きた
↓
ログをみて、ググってそれらしい対策したけどエラー文が変わらない
↓
質問しよう
大枠の流れこんな感じです。
doker開発環境でrails sみたいなログを出しながらデバッグもしたいです。docker attachでbinding.pryをしても
ログが出ることもありませんでした。
docker開発環境でMYSQL:5.7を使ってた時はrails sみたいな色々な操作ログ、SQLログが出ていました。
MYSQL:8.0にバージョンアップしたらログが出力されなくなりました。
MySQL5.7 + Rails で環境構築した時に、自分で何も意識してなくても、rails sみたいなログが
docker-compose upすると
すでに出てたので、、、、。自分でもなぜMysql5.7だとログが出たのか、なんでMysql8.0だと出ないのか分かりませんでした。
そもそもMySQLをバージョンアップしたからログが出なくなったのか確かめるために今、MySQL5.7にバージョンダウンしたところですが、docker-compose.ymlをバージョンダウンするために書き換えたら上記のようなエラーが起こったって経緯です。
問題はMYSQLのバージョンなのか知りたかったので、MySQL5.7にバージョンダウンしてrails sみたいなログが出力されるか確かめようと思い、バージョンダウンして、再度docker-compose buildを実行したら
ブラウザに、
ActiveRecord::ConnectionNotEstablished
Unknown MySQL server host 'db' (-2)
このようなエラーが表示されました。
おそらくデータベースコンテナが立ち上がっていないので、
このようなエラーが出てしまうのだと思います。
エラー内容
docker-compose up
を実行したら
2021-06-12 07:42:36+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.34-1debian10 started. 2021-06-12 07:42:36+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' 2021-06-12 07:42:36+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.34-1debian10 started. 2021-06-12 07:42:36+00:00 [Note] [Entrypoint]: Initializing database files 2021-06-12T07:42:36.843528Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2021-06-12T07:42:36.848436Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting. 2021-06-12T07:42:36.848513Z 0 [ERROR] Aborting
こんな感じのエラーが出てしまいました。
docker-compose.yml
version: '3' services: db: #image: mysql:8.0.21 image: mysql:5.7 #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 volumes: - ./tmp/db:/var/lib/mysql/data #command: --default-authentication-plugin=mysql_native_password # 認証方式を8系以前のものにする web: build: . command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" stdin_open: true tty: true # この2文を追加でコンテナ内の標準入出力をローカルマシンのターミナルにアタッチする準備が整います。 volumes: - .:/coffee_passport ports: - "3000:3000" depends_on: - db environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} RAILS_MASTER_KEY: ${RAILS_MASTER_KEY} SENDGRID_API_KEY: ${SENDGRID_API_KEY} ADMIN_USER_PASSWORD: ${ADMIN_USER_PASSWORD} AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID} AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY} GOOGLE_USER_NAME: ${GOOGLE_USER_NAME} GOOGLE_PASSWORD: ${GOOGLE_PASSWORD} SENDGRID_USER_NAME: ${SENDGRID_USER_NAME} SENDGRID_PASSWORD: ${SENDGRID_PASSWORD} PAYJP_SECRET_KEY: ${PAYJP_SECRET_KEY} PAYJP_PUBLIC_KEY: ${PAYJP_PUBLIC_KEY} MYSQL_HOST: db # selenium_chrome を使うために以下の行を追加 SELENIUM_DRIVER_URL: http://selenium_chrome:4444/wd/hub" selenium_chrome: image: selenium/standalone-chrome-debug logging: driver: none database.yml default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: <%= ENV['MYSQL_ROOT_PASSWORD'] %> socket: /tmp/mysql.sock # host: <%= ENV['MYSQL_HOST'] || 'localhost' %> mysql.80 host: db development: <<: *default database: coffee_passport_development
試したこと
dockerDesktopを確認したらDBコンテナが立ち上がっておらずログを確認したら
2021-06-12 07:42:36+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.34-1debian10 started.
2021-06-12 07:42:36+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2021-06-12 07:42:36+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.34-1debian10 started.
2021-06-12 07:42:36+00:00 [Note] [Entrypoint]: Initializing database files
2021-06-12T07:42:36.843528Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-06-12T07:42:36.848436Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2021-06-12T07:42:36.848513Z 0 [ERROR] Aborting
とエラーが表示されていました。
--initialize specified but the data directory has files in it. Aborting.
この部分が問題だと考え、ググったら
https://qiita.com/shimacpyon/items/50d9a688f88db416d518
data ディレクトリにファイルがあって失敗してることがわかる(本来は空っぽの状態から実行されている必要がある)
との記事をみつけたので、
https://hensa40.cutegirl.jp/archives/8396
この方のように、
rm -rf mysql-data
rm -rf - ./tmp/db
rm -rf /var/lib/mysql/data
rm -rf ./tmp/db
rm -rf tmp
ひたすらデータディレクトリのファイルを消しました。
念のために、全コンテナ、イメージ、ボリュームを削除して
docker-compose build --no-cache
を実行して
docker-compose up
を
実行してもエラーが変わりませんでした。
docker volumeを消したらこのエラーが解決すると言う記事を見て、
また、dockerを全消去して、何もかもまっさらにしました
( おそらくdocker system praneを実行したはず)
ですが、エラー内容は変わりませんでした。
もしよろしければ御回答いただければ、幸いです。
また、情報不足等至らない点がありましたら、厳しく指摘いてくださると幸いです。
あなたの回答
tips
プレビュー