views:

33

answers:

1

As an API endpoint, I need to provide a table schema with a version number so that the mobile developers I am working with can cache the schema until it changes again.

I am automating this process, which complicates the "versioning" idea.

At first I thought that I could use the latest migration number as the version # but it occurred to me that Rails migrations are non-sequential now, so it would mean that I would need to give them all migration numbers and they would need to decide if there was a new migration present by comparing the arrays (maybe this is the solution?)

I’m wondering if I am missing anything - if there is any other schema version number in Rails apart from those stored in the migration table, or also if there was any way of tracking this through mysql.

A: 

Using the migration version could be a good idea. If you don't want to expose the full list of missing migrations, you can provide the current schema version for a quick comparison, then expose the full list on a second request.

You can obtain the list of pending migration using the ActiveRecord::Migrator object.

migrations = ActiveRecord::Migrator.new(:up, 'db/migrate').pending_migrations
migrations.each do |migration|
  migration.version
end

And for the current schema version.

schema  = File.read("#{RAILS_ROOT}/db/schema.rb")
version = ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, schema)
puts version
Simone Carletti