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
|
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."
|
@doc "Create a host and print the plaintext token once."
|
||||||
def register_host(name) do
|
def register_host(name) do
|
||||||
|
load_app!()
|
||||||
|
|
||||||
case Server.Hosts.create_host(name) do
|
case Server.Hosts.create_host(name) do
|
||||||
{:ok, {host, token}} ->
|
{:ok, {host, token}} ->
|
||||||
IO.puts("Host '#{host.name}' registered (id=#{host.id}).")
|
IO.puts("Host '#{host.name}' registered (id=#{host.id}).")
|
||||||
|
|
@ -15,4 +19,25 @@ defmodule Server.Release do
|
||||||
{:error, cs}
|
{:error, cs}
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
|
||||||
5
server/rel/overlays/bin/migrate
Executable file
5
server/rel/overlays/bin/migrate
Executable file
|
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/sh
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
cd -P -- "$(dirname -- "$0")"
|
||||||
|
exec ./server eval Server.Release.migrate
|
||||||
1
server/rel/overlays/bin/migrate.bat
Executable file
1
server/rel/overlays/bin/migrate.bat
Executable file
|
|
@ -0,0 +1 @@
|
||||||
|
call "%~dp0\server" eval Server.Release.migrate
|
||||||
Loading…
Add table
Add a link
Reference in a new issue