StrongMigrations
Catch unsafe migrations in your Elixir application
Table of Contents
What is it
strong_migrations is a library that protects your application from invoking unsafe migrations, they needs to be marked as a safe.
- Analyze migrations if they are safe.
- If migrations are unsafe -> print errors.
- If migrations are safe -> use
ecto.migrate.
Features
- checking if your migrations are adding an index concurrently in transaction
- checking if your migrations are adding an index but not concurrently
- checking if your migrations are removing an index concurrently in transaction
- checking if your migrations are renaming columns (it's always better to remove old and add new column)
- checking if your migrations are removing columns
- checking if your migrations are removing tables
- mark
safety assured do: drop table(:posts)or multiline when you're sure it's safe ... tbd
How to install
The package can be installed by adding strong_migrations to your list of dependencies in mix.exs as follows. Also, it's worth adding an alias like: ecto.migrate -> strong_migrations.migrate and thanks to that you'll be sure that all migrations were checked before running.
Update your mix.exs:
def deps do
[
{:strong_migrations, "~> 0.1"}
]
end
How to configure
If you want to specify which classifiers you want to use, please add to your config.exs following lines
config :strong_migrations,
classifiers: [
StrongMigrations.Classifiers.AddIndexConcurrentlyInTransaction,
StrongMigrations.Classifiers.AddIndexNotConcurrently,
StrongMigrations.Classifiers.DropIndexConcurrentlyInTransaction,
StrongMigrations.Classifiers.DropTable,
StrongMigrations.Classifiers.RemoveColumn,
StrongMigrations.Classifiers.RenameColumn
]
If you want to specify migration paths available in your project (not default -> priv/repo/migrations), please add to your config.exs following lines
config :strong_migrations,
migration_paths: [
"priv/repo/migrations",
"apps/*/priv/repo/migrations",
"my/fancy/path/to/migrations"
],