feat(server): phoenix release with migrate/rollback helpers
Extended Server.Release with migrate/0 and rollback/2 so 'bin/server eval Server.Release.migrate' works from a released binary. Removed the phx.gen.release-generated rel/overlays/bin/server wrapper that hardcoded 'start' — it collided with the mix-release default dispatcher, blocking 'server version', 'server eval', etc. The 'migrate' overlay is kept (bin/migrate calls server eval under the hood).
This commit is contained in:
parent
2ea5dd4b54
commit
b44ab86fdb
3 changed files with 32 additions and 1 deletions
|
|
@ -1,8 +1,12 @@
|
|||
defmodule Server.Release do
|
||||
@moduledoc "Convenience functions for IEx and future release tasks."
|
||||
@moduledoc "Convenience functions for IEx and release-stage admin tasks."
|
||||
|
||||
@app :server
|
||||
|
||||
@doc "Create a host and print the plaintext token once."
|
||||
def register_host(name) do
|
||||
load_app!()
|
||||
|
||||
case Server.Hosts.create_host(name) do
|
||||
{:ok, {host, token}} ->
|
||||
IO.puts("Host '#{host.name}' registered (id=#{host.id}).")
|
||||
|
|
@ -15,4 +19,25 @@ defmodule Server.Release do
|
|||
{:error, cs}
|
||||
end
|
||||
end
|
||||
|
||||
@doc "Run pending migrations. Invoke via: bin/server eval 'Server.Release.migrate()'"
|
||||
def migrate do
|
||||
load_app!()
|
||||
|
||||
for repo <- repos() do
|
||||
{:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :up, all: true))
|
||||
end
|
||||
end
|
||||
|
||||
@doc "Roll back one step per repo."
|
||||
def rollback(repo, version) do
|
||||
load_app!()
|
||||
{:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :down, to: version))
|
||||
end
|
||||
|
||||
defp repos, do: Application.fetch_env!(@app, :ecto_repos)
|
||||
|
||||
defp load_app! do
|
||||
Application.load(@app)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue