Migrations on Fly.io (triggered from MyApp.Release.migrate()) & what does ash.migrate do?

Has anyone set up their Ash Framework Postgres app deployment (and, most importantly, migration) on Fly.io?

I’m trying to figure out what I need to do for a safe deployment/migration.

From what I’ve deciphered on the Fly.io side, fly deploy will run MyApp.Release.migrate() during deployment… which appears to be a pretty generic Ecto template… installed prior to (or part of?) Ash setup (@zachdaniel just suspecting… shouldn’t this have been replaced with something Ash specific during config/gen?):

defmodule WasteWalk.Release do
  @moduledoc """
  Used for executing DB release tasks when run in production without Mix
  installed.
  """
  @app :waste_walk

  def migrate do
    load_app()

    for repo <- repos() do
      {:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :up, all: true))
    end
  end
  ...
end

And looking through the deps for ash.migrate it appears to be… more complicated than that. :slight_smile:

So… wondering if anyone has done this and could share a solution. Otherwise, I’m guessing I’ll need to change the above, but not at all clear on what exactly I should be calling – let alone, upgrading the corresponding rollback etc., etc., functions.

There is a pretty detailed example in the AshPostgres docs.

Generally speaking, Ash leverages the existing Ecto migrations. The important difference is mainly around tenant migrations, which are run separately than the main migrations.

Aha. Thanks… I missed that…

Looking that over – am I right in concluding that for non-multitenant installs, it’s 100% the same as the generic Ecto migrator? (I mean, the migrate() function certainly seems to say so).

Which is splendid, since I’m not multi-tenant. Yet anyhow. :slight_smile:

There’s a bit more behind the repos() function but, that should end up returning exactly the same thing on a single tenant. So, it would seem until I go multi-tenant, the generic Ecto-based migrator above should be good.

Pretty much. The Ash mix tasks are much more important in development, because there are nifty dev migrations that you can generate while working on changing things up.