2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

今更ながら Ruby on Rails Tutorial をやってみた (その7)

Posted at

この記事について…

普段はRuby on Railsと無縁なプログラマなんですが、今更ながら面白そうという単純な理由からRuby on Rails Tutorialをやってみようと思い立ちました。今回は前回の記事の続きで第7章をやっていきます。
尚、Rails 5.1に対応した第4版を用いて、かつVagrantを使用した環境で進めていきます。

※最近私用で忙しくなってしまった為、Rails Tutorialの更新頻度は落とそうと思います。ただ、別件でRaspberry Pi関係の学習が必要になった為、そちらについては逐一更新しようと思っています。

第7章 ユーザー登録

この章ではブラウザ上からUserモデルを登録する画面を作成します。普段お世話になっているWebアプリケーションでほぼほぼ存在する機能ですね。

データベースの内容をリセットする際につまずく

rails db:migrate:resetを実行してデータベースの内容を一旦リセットする際に次のエラーが発生しました。

Text file busy @ unlink_internal - /vagrant_data/environment/sample_app/db/development.sqlite3
Couldn't drop database 'db/development.sqlite3'
rails aborted!
Errno::ETXTBSY: Text file busy @ unlink_internal - /vagrant_data/environment/sample_app/db/development.sqlite3
/vagrant_data/environment/sample_app/bin/rails:9:in `require'
/vagrant_data/environment/sample_app/bin/rails:9:in `<top (required)>'
/vagrant_data/environment/sample_app/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:drop:_unsafe
(See full trace by running task with --trace)

情報を探ったところ、RailsHackさんのページに原因が記述されていました。(参考になりました。ありがとうございます。)
どうも今回のようにゲストOSとホストOS間で共有フォルダを使用して開発している場合に発生することがあるようです。
ちなみに、今回使用させていただいているVagrantの設定ファイルだと、/vagrant/vagrant_dataがホストOSと共有されていますので、それ以外のディレクトリにデータベースを移動する必要があります。

今回は以下の手順で一時的にデータベースの位置を移動してリセットを行いました。

  1. ~/rails/sample_appdevelopment.sqlite3test.sqlite3をコピーする。
  2. database.ymlを編集する。
  3. rails db:migrate:resetを実行する。 ⇒ リセットが成功する。RAILS_ENV=testでも実行することをお忘れなく。
  4. database.ymlの変更箇所を元に戻す。
  5. 元の場所に、~/rails/sample_app内のdevelopment.sqlite3test.sqlite3を上書きする。
database.ymlの編集箇所
  .
  .
development:
  <<: *default
  database: /home/vagrant/rails/sample_app/development.sqlite3 #ディレクトリを変更
  .
test:
  <<: *default
  database: /home/vagrant/rails/sample_app/test.sqlite3 #ディレクトリを変更
  .
  .

rails db:migrate:resetを成功させることを重視したので上記手段を取りましたが、結局やりたいことはSQLiteの中身を消したいだけなので、DB Browser for SQLiteを使用するなりなんなりすればいいかもしれませんね。

さて、この章では他にHeroku環境でSSLを使用する等かなり実環境に近い設定を学ぶことができます。
以降の章ではログイン機構の実装、登録したユーザーの一覧表示等、必要不可欠な機能を実装していくようなので、また時間を見つけて進めていこうと思います。

それでは、次回 第8章から再開したいと思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?