Railsのアプリを起動中、テーブルcreate処理でロックによるエラーなど、テーブルに関するエラー発生する時があります。
これは、複数同アプリの処理が起動中なのが原因な場合も考えられます。
その場合は、現在アプリで処理しているものを停止させる必要があります。
mysqlを起動する
以下のコマンドより、mysqlを起動します。
ターミナル
xxxxx@xxxxxMacBook-Air test-app % mysql -u root
アプリの処理一覧表示
次に以下のコマンドで現在起動している処理一覧を表示させます。ターミナル
mysql> show processlist;
するとターミナルに以下の表示がされます。
ターミナル
+-----+------+-----------+----------------------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+-----------+----------------------+---------+------+-------+------------------+
| 388 | root | localhost | test_app_development | Sleep | 382 | | NULL |
| 389 | root | localhost | test_app_development | Sleep | 371 | | NULL |
| 390 | root | localhost | NULL | Query | 0 | init | show processlist |
+-----+------+-----------+----------------------+---------+------+-------+------------------+
Idと388と389がアプリ内で処理中のもの、390は先ほどコマンドにより処理一覧を表示させたものです。
アプリの処理しているものを削除
388を削除してみます。(以下同様に389も削除します)ターミナル
mysql> kill 388;
すると、以下のように388が削除されました。
このように、アプリ内で起動中の処理を削除することで、解決することもあります。
ターミナル
+-----+------+-----------+----------------------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+-----------+----------------------+---------+------+-------+------------------+
| 389 | root | localhost | test_app_development | Sleep | 371 | | NULL |
| 390 | root | localhost | NULL | Query | 0 | init | show processlist |
+-----+------+-----------+----------------------+---------+------+-------+------------------+
mysqlを閉じる
以下のコマンドでmysqlを閉じることができます。ターミナル
mysql> exit