I created an umbrella app as a template for a workshop I’ll give into my university. So I preferred to show an umbrella project to build many APIs projects that communicate between them. So each app has it own Ecto.Repo
and also its migrations path/files.
However it seems that migrations are runned in the order of app creation/disposition on the apps
directory.
This is the current structure of my apps:
.
├── Dockerfile
├── README.md
├── apps
│ ├── liquid_accounts
│ ├── liquid_auth
│ ├── liquid_operations
│ ├── proxy_web
│ └── release
├── config
│ ├── config.exs
│ ├── dev.exs
│ ├── prod.exs
│ ├── runtime.exs
│ └── test.exs
├── docker-compose.yml
├── flake.lock
├── flake.nix
├── mix.exs
├── mix.lock
└── rel
When I trying to run migrations (2 from liquid_auth
and 1 for liquid_accounts
), that occurs:
The database for Liquid.Accounts.Repo has been dropped
The database for Liquid.Auth.Repo has already been dropped
The database for Liquid.Operations.Repo has already been dropped
The database for Liquid.Accounts.Repo has been created
The database for Liquid.Auth.Repo has already been created
The database for Liquid.Operations.Repo has already been created
21:24:25.695 [info] == Running 20231020225840 Liquid.Accounts.Repo.Migrations.CreateBankAccount.change/0 forward
21:24:25.697 [info] create table bank_account
** (Postgrex.Error) ERROR 42P01 (undefined_table) relation "user" does not exist
(ecto_sql 3.10.2) lib/ecto/adapters/sql.ex:1047: Ecto.Adapters.SQL.raise_sql_call_error/1
(elixir 1.15.7) lib/enum.ex:1693: Enum."-map/2-lists^map/1-1-"/2
(ecto_sql 3.10.2) lib/ecto/adapters/sql.ex:1154: Ecto.Adapters.SQL.execute_ddl/4
(ecto_sql 3.10.2) lib/ecto/migration/runner.ex:327: Ecto.Migration.Runner.log_and_execute_ddl/3
(elixir 1.15.7) lib/enum.ex:1693: Enum."-map/2-lists^map/1-1-"/2
(ecto_sql 3.10.2) lib/ecto/migration/runner.ex:290: Ecto.Migration.Runner.perform_operation/3
(stdlib 5.1.1) timer.erl:270: :timer.tc/2
(ecto_sql 3.10.2) lib/ecto/migration/runner.ex:25: Ecto.Migration.Runner.run/8
Of course relation “user” doesn’t exist! It is defined on liquid_auth
app, which it should be the first one migrated as those migrations were the first ones I created…
Migrations of liquid_auth
:
20231020160450_create_user.exs 20231020173651_create_api_key.exs
And the only migration for liquid_accounts
: 20231020225840_create_bank_account.exs
.
So how can I reorder the migrations execution order?