You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Ragtime is a Clojure library for migrating structured data in a way
that's database independent. It defines a common interface for
expressing migrations, much like Ring defines a common interface
for expressing web applications.
Installation
Add the following dependency to your deps.edn file:
dev.weavejester/ragtime {:mvn/version "0.11.0"}
Or to your Leiningen project file:
[dev.weavejester/ragtime "0.11.0"]
Overview
Ragtime needs a minimum of three things to work:
A migratable data store
An ordered sequence of migrations
A strategy on how to deal with conflicts
A data store is an implementation of the DataStore protocol, and
tells Ragtime how to record which migrations are applied to an
arbitrary store of data, such as a database. It has three methods:
add-migration-id - add a new migration ID to the store
remove-migration-id - remove a migration ID from the store
applied-migration-ids - return an ordered list of applied IDS
Migrations are implementations of the Migration protocol, which also
has three methods:
id - returns a unique ID for the migration
run-up! - applies the migration to a database
run-down! - rolls back the migration in a database
Ragtime comes with implementations of these protocols for Cloure's
java.jdbc library and Sean Corfield's next.jdbc library,
therefore supporting SQL migrations out of the box.
The migration store for SQL database is a special migrations table,
and the migrations can be specified as either .sql files, or .edn
files. For more information, see the documentation below.
Some Ragtime functions require one more element: a migration index. This
should satisfy the MigrationIndex protocol, which has three methods:
index-migration - index a migration by key
deindex-migration - remove a migration from the index
get-indexed-migration - get an indexed migration by key
This is used for storing migration information. By default this protocol
is satisfied by an ordinary Clojure map, but could be attached to a
persistence layer.