how would I create database on release task with elixir 1.9?
I found on hexdocx https://hexdocs.pm/phoenix/releases.html#ecto-migrations-and-custom-commands how to run migration, but not database creation
before I upgraded to 1.9 I had in my release script create and migrate following this: https://ronantreacy.com/blog/deploying-phoenix-applications-using-docker-and-distillery
here is my code for creating database:
defmodule Release.Tasks do
@start_apps [ :postgrex, :ecto ]
@myapps [:my_app]
@repos [MyApp.Repo]
def createdb do
# Ensure all apps have started
Enum.each(@myapps, fn(x) ->
:ok = Application.load(x)
end)
# Start postgrex and ecto
Enum.each(@start_apps, fn(x) ->
{:ok, _} = Application.ensure_all_started(x)
end)
# Create the database if it doesn't exist
Enum.each(@repos, &ensure_repo_created/1)
:init.stop()
end
defp ensure_repo_created(repo) do
case repo.__adapter__.storage_up(repo.config) do
:ok -> :ok
{:error, :already_up} -> :ok
{:error, term} -> {:error, term}
end
end
end
and then I ran it on the pre_start hook like this:
bin/my_app command Elixir.Release.Tasks createdb
,
which worked well,
now when I am using 1.9 release, i try running with
./bin/my_app eval 'Release.Tasks.createdb()'
which follows this error:
** (KeyError) key :database not found in: [telemetry_prefix: [:my_app, :repo], otp_app: :my_app, timeout: 15000, pool_size: 10]
(elixir) lib/keyword.ex:393: Keyword.fetch!/2
(ecto_sql) lib/ecto/adapters/postgres.ex:128: Ecto.Adapters.Postgres.storage_up/1
lib/create_migrate_task.ex:57: Release.Tasks.ensure_repo_created/1
(elixir) lib/enum.ex:783: Enum."-each/2-lists^foreach/1-0-"/2
(elixir) lib/enum.ex:783: Enum.each/2
lib/create_migrate_task.ex:18: Release.Tasks.createdb/0
(stdlib) erl_eval.erl:680: :erl_eval.do_apply/6
note:
this is my config.exs
: (I did not use run time configuration)
import Config
config :my_app,
ecto_repos: [MyApp.Repo]
config :school, MyApp.Repo,
database: "my-cool-db",
password: "changeme",
hostname: "123.456.8.789",
port: "5432",
timeout: 60_000,
pool_size: 10,
max_overflow: "100",
queue_target: 60_000,
queue_interval: 120_000