Rails migration: best way to retrieve current migration version

Rails 5.2 and higher:

> ApplicationRecord.connection.migration_context.current_version
   (0.3ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
=> 20200510093804

> ApplicationRecord.connection.migration_context.get_all_versions
   (0.3ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
=> [20191005164928,
    20191006111502,
   ...

 
Rails up to 5.1.7:

> ActiveRecord::Migrator.current_version
   (0.2ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" 
=> 20120110085802

> ActiveRecord::Migrator.get_all_versions
   (0.3ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" 
=> [20111114121610,
    20111115091108,
   ...

There's a much nicer way: rake db:migrate:status

up     20120530222941  Create shenanigans
up     20120613030015  *** NO FILE ***

Indicating that I've deleted my latest migration file.

Or more simply:

> rake db:version
Current version: 20120613030015

If you don't want to do this without loading your app you can create a script like this:

#!/usr/bin/env ruby

root = File.expand_path("../..", __FILE__)
lines = `ls #{root}/db/migrate`
puts lines.split("\n").last.split(" ").last.split("_").first

Note the root line is because my script is in a bin dir


For Rails 5.x/6.x:

puts ApplicationRecord.connection.migration_context.current_version
puts ApplicationRecord.connection.migration_context.get_all_versions