2015年5月5日火曜日

[Rails]rake db:resetとrake db:migrate:reset

Ruby on Rails チュートリアルで知ったrake db:resetを何の疑問も持たずに使っていたが、activeadminを使っていて少々困ったので調べてみた。

activeadminは簡単に管理画面が作れる便利なgemだけど、今回の本題とはズレるので詳細は省略。
で、困ったことはadmin@example.comという管理ユーザがrake db:resetだと作成されないこと。
仕方ないので、railsコンソール開いてAdminUser.create!してしまった。まぁ、何度もやりたくないわな。

migrateファイルを覗いてみる。
class DeviseCreateAdminUsers < ActiveRecord::Migration
  def migrate(direction)
    super
    # Create a default user
    AdminUser.create!(email: 'admin@example.com', password: 'password', password_confirmation: 'password') if direction == :up
  end
・・・
migrateが実行されてないのかな。

RailsGuidesを見てみるとdb:resetは
The rake db:reset task will drop the database and set it up again. This is functionally equivalent to rake db:drop db:setup.

This is not the same as running all the migrations. It will only use the contents of the current schema.rb file.
全てのmigrationsを実行してるのではなくて、現在のschema.rbを使ってるだけ、とのことだ。なるほど。

それに対して、db:migrate:resetは順にmigrationsを実行してくれるわけだ。初期の管理ユーザーも作られた。