前提・実現したいこと
Docker for MacとRails5で開発を行っているのですが開発環境・本番環境のMySQLでエラーが出てしまい。アプリが表示されなくなりました。 デバッグにお力をおかしください。
発生している問題・エラーメッセージ
db:reset後にdb:migrateしようとしてエラー
$ docker-compose run web rails db:migrate
Starting weinance_db_1 ... done
Starting weinance_chrome_1 ... done
rails aborted!
ActiveRecord::StatementInvalid: Mysql2::Error: Tablespace is missing for table `app_name_development`.`schema_migrations`.: SHOW FULL FIELDS FROM `schema_migrations`
/usr/local/bundle/gems/mysql2-0.5.2/lib/mysql2/client.rb:131:in `_query'
/usr/local/bundle/gems/mysql2-0.5.2/lib/mysql2/client.rb:131:in `block in query'
/usr/local/bundle/gems/mysql2-0.5.2/lib/mysql2/client.rb:130:in `handle_interrupt'
/usr/local/bundle/gems/mysql2-0.5.2/lib/mysql2/client.rb:130:in `query'
/usr/local/bundle/gems/activerecord-5.2.3/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:187:in `block (2 levels) in execute'
/usr/local/bundle/gems/activesupport-5ndex.rb:92:in `register'
〜 (文字数制限のため中略) 〜
/usr/local/bundle/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
/usr/local/bundle/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `block in require'
/usr/local/bundle/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:257:in `load_dependency'
/usr/local/bundle/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
bin/rails:4:in `<main>'
Caused by:
Mysql2::Error: Tablespace is missing for table `app_name_development`.`schema_migrations`.
/usr/local/bundle/gems/mysql2-0.5.2/lib/mysql2/client.rb:131:in `_query'
/usr/local/bundle/gems/mysql2-0.5.2/lib/mysql2/client.rb:131:in `block in query'
/usr/local/bundle/gems/mysql2-0.5.2/lib/mysql2/client.rb:130:in `handle_interrupt'
/usr/local/bundle/gems/mysql2-0.5.2/lib/mysql2/client.rb:130:in `query'
/usr/local/bundle/gems/activerecord-`block in require'
〜 (文字数制限のため中略) 〜
/usr/local/bundle/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:257:in `load_dependency'
/usr/local/bundle/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
bin/rails:4:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
Rootページ(localhost:3000)にアクセスしてエラー(エラー画面になって表示されない)
$docker-compose logs
=>
web_1 | Started GET "/" for 172.19.0.1 at 2019-09-27 16:17:10 +0000
web_1 | Cannot render console from 172.19.0.1! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
web_1 | (9.7ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
web_1 | ↳ /usr/local/bundle/gems/activerecord-5.2.3/lib/active_record/log_subscriber.rb:98
web_1 | (4.0ms) SELECT `schema_migrations`.`version` FROM `schema_migrations` ORDER BY `schema_migrations`.`version` ASC
web_1 | ↳ /usr/local/bundle/gems/activerecord-5.2.3/lib/active_record/log_subscriber.rb:98
web_1 |
web_1 | ActiveRecord::StatementInvalid (Mysql2::Error: Tablespace is missing for table `app_name_development`.`schema_migrations`.: SELECT `schema_migrations`.`version` FROM `schema_migrations` ORDER BY `schema_migrations`.`version` ASC):
web_1 |
web_1 | mysql2 (0.5.2) lib/mysql2/client.rb:131:in `_query'
web_1 | mysql2 (0.5.2) lib/mysql2/client.rb:131:in `block in query'
web_1 | mysql2 (0.5.2) lib/mysql2/client.rb:130:in `handle_interrupt'
web_1 | mysql2 (0.5.2) lib/mysql2/client.rb:130:in `query'
web_1 | activerecord (5.2.3) lib/active_record/connection_adapters/abstract_mysql_adapter.rb:187:in `block (2 levels) in execute'
web_1 | activesupport (5.2.3) lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
web_1 | activesupport (5.2.3) lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
web_1 | activesupport (5.2.3) lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
web_1 | activerecord (5.2.3) lib/active_record/connection_adapters/abstract_mysql_adapter.rb:186:in `block in execute'
web_1 | activerecord (5.2.3) lib/active_record/connection_adapters/abstract_adapter.rb:581:in `block (2 levels) in log'
web_1 | /usr/local/lib/ruby/2.6.0/monitor.rb:230:in `mon_synchronize'
web_1 | activerecord (5.2.3) lib/active_record/connection_adapters/abstract_adapter.rb:580:in `block in log'
web_1 | activesupport (5.2.3) lib/active_support/notifications/instrumenter.rb:23:in `instrument'
web_1 | activerecord (5.2.3) lib/active_record/connection_adapters/abstract_adapter.rb:571:in `log'
web_1 | activerecord (5.2.3) lib/active_record/connection_adapters/abstract_mysql_adapter.rb:185:in `execute'
web_1 | activerecord (5.2.3) lib/active_record/connection_adapters/mysql/database_statements.rb:28:in `execute'
web_1 | activerecord (5.2.3) lib/active_record/connection_adapters/abstract_mysql_adapter.rb:196:in `execute_and_free'
web_1 | activerecord (5.2.3) lib/active_record/connection_adapters/mysql/database_statements.rb:33:in `exec_query'
web_1 | activerecord (5.2.3) lib/active_record/connection_adapters/abstract/database_statements.rb:478:in `select'
web_1 | activerecord (5.2.3) lib/active_record/connection_adapters/abstract/database_statements.rb:70:in `select_all'
web_1 | activerecord (5.2.3) lib/active_record/connection_adapters/abstract/query_cache.rb:104:in `block in select_all'
web_1 | activerecord (5.2.3) lib/active_record/connection_adapters/abstract/query_cache.rb:127:in `block in cache_sql'
web_1 | /usr/local/lib/ruby/2.6.0/monitor.rb:230:in `mon_synchronize'
〜 (文字数制限のため中略) 〜
web_1 | activesupport (5.2.3) lib/active_support/tagged_logging.rb:28:in `tagged'
web_1 | activesupport (5.2.3) lib/active_support/tagged_logging.rb:71:in `tagged'
web_1 | railties (5.2.3) lib/rails/rack/logger.rb:26:in `call'
web_1 | sprockets-rails (3.2.1) lib/sprockets/rails/quiet_assets.rb:13:in `call'
web_1 | actionpack (5.2.3) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
web_1 | actionpack (5.2.3) lib/action_dispatch/middleware/request_id.rb:27:in `call'
web_1 | rack (2.0.7) lib/rack/method_override.rb:22:in `call'
web_1 | rack (2.0.7) lib/rack/runtime.rb:22:in `call'
web_1 | activesupport (5.2.3) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
web_1 | actionpack (5.2.3) lib/action_dispatch/middleware/executor.rb:14:in `call'
web_1 | actionpack (5.2.3) lib/action_dispatch/middleware/static.rb:127:in `call'
web_1 | rack (2.0.7) lib/rack/sendfile.rb:111:in `call'
web_1 | railties (5.2.3) lib/rails/engine.rb:524:in `call'
web_1 | puma (3.12.1) lib/puma/configuration.rb:227:in `call'
web_1 | puma (3.12.1) lib/puma/server.rb:660:in `handle_request'
web_1 | puma (3.12.1) lib/puma/server.rb:474:in `process_client'
web_1 | puma (3.12.1) lib/puma/server.rb:334:in `block in run'
web_1 | puma (3.12.1) lib/puma/thread_pool.rb:135:in `block in spawn_thread'
該当のソースコード
なにがトリガーになってこんな状態になったかわからないため、関係がありそうなdocker-compose.ymlを示します。
version: '3'
services:
# mysqlのコンテナ
db:
# dbのイメージ指定。ない場合はpullする
image: mysql:5.7
# ローカル./mysqlとコンテナ/var/lib/mysqlを同期
volumes:
- ./mysql:/var/lib/mysql
# 環境変数を追加(MySQLのパスワードを設定)
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: root
ports:
- "3306:3306"
# Railsのコンテナ. コンテナの名前?
# コンテナ名なのでなんでもいい
web:
# Dockerfileがあるディレクトリ
build: .
# buildした時に実行するコマンド
command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
# ホスト上のディレクトリをコンテナにマウント
volumes:
- .:/app_name
# ポートをバインドします.ポート番号を指定. [ホスト:コンテナ]で設定
ports:
- "3000:3000"
# webはdbに依存。 起動順がdb→chrome→webになる。
depends_on:
- db
- chrome
# Headless chrome用
chrome:
image: selenium/standalone-chrome
ports:
- "4444:4444"
試したこと
- DBのリセット
- コンテナの再build
- migrate(はエラーになります)
正直いろいろ対処しているうちに悪化してしまいました。
補足情報(FW/ツールのバージョンなど)
- ruby 2.6.3
- Rails 5.2.3
- mysql2 0.5.2
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
check解決した方法
0
解決しました!
アドバイスいただいたことを参考に、一度、docker-compose downでコンテナを削除して、db:create -> db:migrate -> db:seedで復活しました。
ありがとうございました!
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
rails が migrationの管理に使っているtableが壊れているようです。
db:resetではなく、 db:drop、db:create からやりなおしてみたらどうでしょう
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる