表題の通り、Vagrant環境で作成したRailsアプリケーションでデータベースを削除しようとした際にエラーが発生しました。
ググってみると海外の記事だったり、曖昧な表現の記事が多かったため、自分なりに手順をまとめました。
実行環境
- Windows10 20H2
- Vagrant 2.2.18
- Ubuntu 20.04.3 LTS
データベースの削除
以下のコマンドを使うと、データベースを削除することが出来るので実行します。
$rails db:drop
Couldn't drop database 'db/development.sqllite3'
出たわねっ!
正直何かしら出る気しかしませんでした。エラー読み解いていきます。
Errno::ETXTBSY: Text file busy @ apply2files - /home/vagrant/workspace/<(アプリ名>/db/development.sqlite3
このエラーは、Vagrantfile内で指定している共有フォルダ内でデータベースファイルを削除しようとしたため発生します。
データベースファイルとは、ここでいうところの "development.sqlite3" です。
それぞれの環境によって詳細は異なりますが、Vagrantfileには以下のような記載があるかと思います。
1つ目の” ”がWindowsから見たパス、2つ目の" "が仮想環境(Ubuntu等)から見たパスになります。
つまり、先程のエラーの意味は、私の環境だと"/home/vagrant/workspace/"より深い階層に "development.sqlite3" があるとエラーになります。
今回、私は "/home/vagrant" に新規でtempフォルダを作成し、tempフォルダの中へデータベースファイルを移動させました。
[移動元] /home/vagrant/workspace/<(アプリ名>/db
次に、/config/database.yml にデータベースファイルを指定する設定箇所があります。
該当箇所を新しく作ったtempフォルダ内のデータベースファイルを指定します。
これでデータベースを削除する準備が出来ました。
もう一度、データベースを削除するコマンドを実行します。
$rails db:drop