最近webページを作っている時によくわからないエラーが出てしまったので、その時の解決方法の一つをメモがてら書き残しておく。
#動作環境
- Mac OS High Sierra 10.13.3
- postgres (PostgreSQL) 10.1
- Rails 5.1.5
##前提条件
今回の記事ではRails
とPostgreSQL
のインストール方法やセットアップについては省略します。
##本記事で用いている用語
- DB_name:データベースの名前
#Railsの動作状況
データベースにテスト用のデータを流し込み、動作確認をした後で一旦データベースをリセットしようとした時に発生したエラーです。
$ rails db:migrate:reset
PG::ObjectInUse: ERROR: database "DB_name" is being accessed by other users
DETAIL: There are 2 other sessions using the database.
...省略...
今回はこんなエラーが出た時の対処法の1つを紹介します。
#対処法
この現象について調べていると様々な対処法を見つけたのでまずはこれらを試してみました。
##db:reset
参考記事:rails db:migrate:resetできなかったのでrails db:resetした
db:migrate:reset
はそもそもmigrate
とreset
を一度にやるらしく、たまにエラーが出るらしい。そこでmigrate
とreset
を別々に実行してみる。
$ rails db:reset
PG::ObjectInUse: ERROR: database "DB_name" is being accessed by other users
DETAIL: There are 2 other sessions using the database.
なんか自分の場合は他に原因があるらしい。
##強制策
参考記事:PostgreSQLで強制的にデータベースを削除する
これは接続しているデータベースに直接アクセスして、その中身を削除する方法です。
##サーバーを閉じる
強制策が書かれた記事の中にヒントがありました。
他のユーザーがdetabaseにアクセスしてるから、そのデータベースは消せないよというエラー。
つまり先にログインしているやつらを追い出せということですね。
この時私はRailsサーバーを立ち上げたままにしていたのでそれを閉じてあげました。
^C- Gracefully stopping, waiting for requests to finish
=== puma shutdown: yyyy-mm-dd hh:mm:ss +0900 ===
- Goodbye!
Exiting
その後rails db:migrate:reset
を実行します。
$ rails db:migrate:reset
Dropped database 'DB_name'
...省略
とりあえず成功ですね!!
お疲れ様でした\\\٩( 'ω' )و ////
#ちょっとした雑談
今回は初めて触ったRailsで思わぬエラーに遭遇してしまいましたが、なんとか自己解決につながりました。これからも少しづつ日々精進していきたいものです。
#参考にした記事
rails db:migrate:resetできなかったのでrails db:resetした
PostgreSQLで強制的にデータベースを削除する