Skip to content

v2.0.0

Choose a tag to compare

@mfmmq mfmmq released this 25 Sep 08:28
· 29 commits to master since this release
fccfc37

New features

Nandi now supports managing migrations for multiple databases within a single Rails application. This enables teams using database sharding, read/write splits, or multiple database engines to maintain safe migrations across all their databases.

Register multiple databases with independent configurations:

Nandi.configure do |config|
  config.register_database(:primary,
    migration_directory: "db/safe_migrations",
    output_directory: "db/migrate",
    default: true
  )

  config.register_database(:analytics,
    migration_directory: "db/analytics_safe_migrations",
    output_directory: "db/analytics_migrate"
  )

  config.lockfile_directory = "db"
end
  • Generation: rails generate nandi:migration CreateUsers --database=analytics. If no database is specified, it generates for the default database.
  • Compilation: rails generate nandi:compile --database=primary. If no database is specified, it compiles for all databases.
  • Enforcement: Automatically validates all configured databases

Each database maintains its own lockfile:

  • Primary: db/.nandilock.yml
  • Analytics: db/.analytics_nandilock.yml

Migration Guide from v1.x

If you're using a single database, your existing configuration will continue to work. To use the multi-db functionality, all Nandi.configure blocks must be updated to use the register_database method instead of the setters. See the README for complete multi-database configuration options.

Breaking Changes

There are no breaking changes to the CLI or single database use cases. Internal breaking changes:

  • Nandi::CompiledMigration

    • Old: CompiledMigration.build(source_file_path)
    • New: CompiledMigration.build(file_name:, db_name:)
  • Nandi::Lockfile

    • Old: Direct instantiation with Lockfile.new(file: path)
    • New: Access via Lockfile.for(db_name) singleton pattern. Passing nil or :primary will mimic the previous behavior

What's Changed

Full Changelog: v1.0.1...v2.0.0-beta