reversibility_checker
Install
group :development do
gem "reversibility_checker"
end
Usage
$ rails db:migrate:check_reversibility
This task checks diffs between a current schema and a schema which migrated and rollbacked. If there are diffs, it will print the diffs and exit with exit status 1
.
$ rails db:migrate:check_reversibility CURRENT_VERSION=20181020120000
CURRENT_VERSION
environment variable specifies a current schema version before migration. If it isn't passed, a current schema version will be the one of local database.
Example
if you create a following migration file,
class ChangeEmailLimitAtUsers < ActiveRecord::Migration[5.2]
def up
change_column :users, :email, :string, limit: 50
end
def down
change_column :users, :email, :string
end
end
when you run db:migrate:check_reversibility
task, this task will run db:migrate
and db:rollback
and print diffs between a current schema and a rollbacked schema.
$ rails db:migrate:check_reversibility
== +20181020041241 ============================================================
# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.
#
# Note that this schema.rb definition is the authoritative source for your
# database schema. If you need to create the application database on another
# system, you should be using db:schema:load, not running all the migrations
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
# you'll amass, the slower it'll run and the greater likelihood for issues).
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 2018_10_17_064352) do
create_table "users", force: :cascade do |t|
t.string "name"
- t.string "email"
+ t.string "email", limit: 50
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
end
== -20181019134724 ============================================================