mirror of
https://github.com/ash-project/ash_postgres.git
synced 2024-09-20 05:23:18 +12:00
docs: update docs for mix tasks
This commit is contained in:
parent
38eec0ba86
commit
6d4c642522
2 changed files with 51 additions and 38 deletions
|
@ -6,32 +6,19 @@
|
||||||
|
|
||||||
## Tasks
|
## Tasks
|
||||||
|
|
||||||
The available tasks are:
|
Ash comes with its own tasks, and AshPostgres exposes lower level tasks that you can use if necessary. This guide shows the process using `ash.*` tasks, and the `ash_postgres.*` tasks are illustrated at the bottom.
|
||||||
|
|
||||||
- `mix ash_postgres.generate_migrations`
|
|
||||||
- `mix ash_postgres.create`
|
|
||||||
- `mix ash_postgres.drop`
|
|
||||||
- `mix ash_postgres.migrate` (use `mix ash_postgres.migrate --tenants` to run tenant migrations)
|
|
||||||
|
|
||||||
AshPostgres is built on top of ecto, so much of its behavior is pass-through/orchestration of that tooling.
|
|
||||||
|
|
||||||
## Basic Workflow
|
## Basic Workflow
|
||||||
|
|
||||||
- Make resource changes
|
- Make resource changes
|
||||||
- Run `mix ash_postgres.generate_migrations` to generate migrations and resource snapshots
|
- Run `mix ash.codegen --name add_a_combobulator` to generate migrations and resource snapshots
|
||||||
- Run `mix ash_postgres.migrate` to run those migrations
|
- Run `mix ash.migrate` to run those migrations
|
||||||
- Run `mix ash_postgres.migrate --tenants` _as well_ if you have multi-tenant resources.
|
|
||||||
|
|
||||||
For more information on generating migrations, see the module documentation here:
|
For more information on generating migrations, run `mix help ash_postgres.generate_migrations` (the underlying task that is called by `mix ash.migrate`)
|
||||||
`Mix.Tasks.AshPostgres.GenerateMigrations`, or run `mix help ash_postgres.generate_migrations`
|
|
||||||
|
|
||||||
For running your migrations, there is a mix task that will find all of the repos configured in your domains and run their
|
> ### list_tenants/0 {: .info}
|
||||||
migrations. It is a thin wrapper around `mix ecto.migrate`. Ours is called `mix ash_postgres.migrate`
|
>
|
||||||
|
> If you have are using schema-based multitenancy, you will also need to define a `list_tenants/0` function in your repo module. See `AshPostgres.Repo` for more.
|
||||||
If you want to run or rollback individual migrations, use the corresponding
|
|
||||||
|
|
||||||
For tenant migrations (see the multitenancy guides for more) generated by multitenant resources, make sure you are using
|
|
||||||
`mix ash_postgres.generate_migrations`. It is not sufficient to run `mix ash_postgres.migrate --migrations_path tenant_migrations_path`. You will also need to define a `list_tenants/0` function in your repo module. See `AshPostgres.Repo` for more.
|
|
||||||
|
|
||||||
### Regenerating Migrations
|
### Regenerating Migrations
|
||||||
|
|
||||||
|
@ -44,28 +31,23 @@ Often, you will run into a situation where you want to make a slight change to a
|
||||||
N_MIGRATIONS=$(git ls-files --others priv/repo/migrations | wc -l)
|
N_MIGRATIONS=$(git ls-files --others priv/repo/migrations | wc -l)
|
||||||
|
|
||||||
# Rollback untracked migrations
|
# Rollback untracked migrations
|
||||||
mix ecto.rollback -n $N_MIGRATIONS
|
mix ash_postgres.rollback -n $N_MIGRATIONS
|
||||||
|
|
||||||
# Delete untracked migrations and snapshots
|
# Delete untracked migrations and snapshots
|
||||||
git ls-files --others priv/repo/migrations | xargs rm
|
git ls-files --others priv/repo/migrations | xargs rm
|
||||||
git ls-files --others priv/resource_snapshots | xargs rm
|
git ls-files --others priv/resource_snapshots | xargs rm
|
||||||
|
|
||||||
# Regenerate migrations
|
# Regenerate migrations
|
||||||
mix ash_postgres.generate_migrations
|
mix ash.codegen --name $1
|
||||||
|
|
||||||
# Run migrations if flag
|
# Run migrations if flag
|
||||||
if echo $* | grep -e "-m" -q
|
if echo $* | grep -e "-m" -q
|
||||||
then
|
then
|
||||||
mix ecto.migrate
|
mix ash.migrate
|
||||||
fi
|
fi
|
||||||
```
|
```
|
||||||
|
|
||||||
After saving this file to something like `regen.sh`, make it executable with `chmod +x regen.sh`. Now you can run it with `./regen.sh`. If you would like the migrations to automatically run after regeneration, add the `-m` flag: `./regen.sh -m`.
|
After saving this file to something like `regen.sh`, make it executable with `chmod +x regen.sh`. Now you can run it with `./regen.sh name_of_operation`. If you would like the migrations to automatically run after regeneration, add the `-m` flag: `./regen.sh name_of_operation -m`.
|
||||||
|
|
||||||
## Multiple Repos
|
|
||||||
|
|
||||||
If you are using multiple repos, you will likely need to use `mix ecto.migrate` and manage it separately for each repo, as the options would
|
|
||||||
be applied to both repo, which wouldn't make sense.
|
|
||||||
|
|
||||||
## Running Migrations in Production
|
## Running Migrations in Production
|
||||||
|
|
||||||
|
@ -164,3 +146,11 @@ Tasks that need to be executed in the released application (because mix is not p
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### AshPostgres-specific mix tasks
|
||||||
|
|
||||||
|
- `mix ash_postgres.generate_migrations`
|
||||||
|
- `mix ash_postgres.create`
|
||||||
|
- `mix ash_postgres.drop`
|
||||||
|
- `mix ash_postgres.migrate` (use `mix ash_postgres.migrate --tenants` to run tenant migrations)
|
||||||
|
- `mix ash_postgres.rollback` (use `mix ash_postgres.rollback --tenants` to rollback tenant migrations)
|
||||||
|
|
|
@ -420,7 +420,8 @@ defmodule AshPostgres.DataLayer do
|
||||||
|> Enum.map(fn {file, index} -> "#{index + 1}: #{file}" end)
|
|> Enum.map(fn {file, index} -> "#{index + 1}: #{file}" end)
|
||||||
|
|
||||||
n =
|
n =
|
||||||
Mix.shell().prompt("""
|
Mix.shell().prompt(
|
||||||
|
"""
|
||||||
How many migrations should be rolled back#{for_repo}? (default: 0)
|
How many migrations should be rolled back#{for_repo}? (default: 0)
|
||||||
|
|
||||||
Last 20 migration names, with the input you must provide to
|
Last 20 migration names, with the input you must provide to
|
||||||
|
@ -428,7 +429,9 @@ defmodule AshPostgres.DataLayer do
|
||||||
|
|
||||||
#{Enum.join(files, "\n")}
|
#{Enum.join(files, "\n")}
|
||||||
Rollback to:
|
Rollback to:
|
||||||
""" |> String.trim_trailing())
|
"""
|
||||||
|
|> String.trim_trailing()
|
||||||
|
)
|
||||||
|> String.trim()
|
|> String.trim()
|
||||||
|> case do
|
|> case do
|
||||||
"" ->
|
"" ->
|
||||||
|
@ -484,7 +487,11 @@ defmodule AshPostgres.DataLayer do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Mix.Task.run("ash_postgres.rollback", args ++ ["--tenants", "-r", inspect(repo), "-n", to_string(n)])
|
Mix.Task.run(
|
||||||
|
"ash_postgres.rollback",
|
||||||
|
args ++ ["--tenants", "-r", inspect(repo), "-n", to_string(n)]
|
||||||
|
)
|
||||||
|
|
||||||
Mix.Task.reenable("ash_postgres.rollback")
|
Mix.Task.reenable("ash_postgres.rollback")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -507,8 +514,24 @@ defmodule AshPostgres.DataLayer do
|
||||||
# TODO: take args that we care about
|
# TODO: take args that we care about
|
||||||
Mix.Task.run("ash_postgres.create", args)
|
Mix.Task.run("ash_postgres.create", args)
|
||||||
Mix.Task.run("ash_postgres.migrate", args)
|
Mix.Task.run("ash_postgres.migrate", args)
|
||||||
|
|
||||||
|
[]
|
||||||
|
|> AshPostgres.Mix.Helpers.repos!(args)
|
||||||
|
|> Enum.all?(fn repo ->
|
||||||
|
[]
|
||||||
|
|> AshPostgres.Mix.Helpers.tenant_migrations_path(repo)
|
||||||
|
|> Path.join("**/*.exs")
|
||||||
|
|> Path.wildcard()
|
||||||
|
|> Enum.empty?()
|
||||||
|
end)
|
||||||
|
|> case do
|
||||||
|
true ->
|
||||||
|
:ok
|
||||||
|
|
||||||
|
_ ->
|
||||||
Mix.Task.run("ash_postgres.migrate", ["--tenant" | args])
|
Mix.Task.run("ash_postgres.migrate", ["--tenant" | args])
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def tear_down(args) do
|
def tear_down(args) do
|
||||||
# TODO: take args that we care about
|
# TODO: take args that we care about
|
||||||
|
|
Loading…
Reference in a new issue