Add distillery release functionality
This commit is contained in:
parent
fa00afe9bf
commit
47c05c2442
6 changed files with 159 additions and 10 deletions
|
@ -38,11 +38,15 @@ config :tilastokeskus, Tilastokeskus.Archive.Repo,
|
||||||
url: "ecto://tilastokeskus:tilastokeskus@localhost/tilastokeskus",
|
url: "ecto://tilastokeskus:tilastokeskus@localhost/tilastokeskus",
|
||||||
types: Tilastokeskus.Archive.PostgresTypes
|
types: Tilastokeskus.Archive.PostgresTypes
|
||||||
|
|
||||||
config :ua_inspector,
|
if Mix.env() != :prod do
|
||||||
|
config :ua_inspector,
|
||||||
# This is for the DB download mix tasks
|
# This is for the DB download mix tasks
|
||||||
database_path: "priv/ua",
|
database_path: "priv/ua"
|
||||||
|
else
|
||||||
|
config :ua_inspector,
|
||||||
# This is for runtime configuration
|
# This is for runtime configuration
|
||||||
init: {Tilastokeskus.Reception.UADetector, :init}
|
init: {Tilastokeskus.Reception.UADetector, :init}
|
||||||
|
end
|
||||||
|
|
||||||
config :geolix,
|
config :geolix,
|
||||||
init: {Tilastokeskus.Reception.Geolix, :init}
|
init: {Tilastokeskus.Reception.Geolix, :init}
|
||||||
|
|
83
lib/archive/release_migrator.ex
Normal file
83
lib/archive/release_migrator.ex
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
defmodule Tilastokeskus.Archive.ReleaseMigrator do
|
||||||
|
@moduledoc """
|
||||||
|
Tasks for migrating the DB that can be run from a release.
|
||||||
|
"""
|
||||||
|
|
||||||
|
@start_apps [
|
||||||
|
:crypto,
|
||||||
|
:ssl,
|
||||||
|
:postgrex,
|
||||||
|
:ecto
|
||||||
|
]
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Initialise DB by running migrations and then seed scripts.
|
||||||
|
"""
|
||||||
|
def seed() do
|
||||||
|
# Run migrations
|
||||||
|
migrate()
|
||||||
|
|
||||||
|
# Run seed script
|
||||||
|
Enum.each(repos(), &run_seeds_for/1)
|
||||||
|
|
||||||
|
# Signal shutdown
|
||||||
|
IO.puts("Success!")
|
||||||
|
:init.stop()
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Run pending migrations for the DB.
|
||||||
|
"""
|
||||||
|
def migrate() do
|
||||||
|
prepare()
|
||||||
|
Enum.each(repos(), &run_migrations_for/1)
|
||||||
|
end
|
||||||
|
|
||||||
|
defp myapp(), do: :tilastokeskus
|
||||||
|
|
||||||
|
defp repos(), do: Application.get_env(myapp(), :ecto_repos, [])
|
||||||
|
|
||||||
|
defp priv_dir(app), do: "#{:code.priv_dir(app)}"
|
||||||
|
|
||||||
|
defp run_seeds_for(repo) do
|
||||||
|
# Run the seed script if it exists
|
||||||
|
seed_script = seeds_path(repo)
|
||||||
|
|
||||||
|
if File.exists?(seed_script) do
|
||||||
|
IO.puts("Running seed script...")
|
||||||
|
Code.eval_file(seed_script)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defp migrations_path(repo), do: priv_path_for(repo, "migrations")
|
||||||
|
|
||||||
|
defp seeds_path(repo), do: priv_path_for(repo, "seeds.exs")
|
||||||
|
|
||||||
|
defp priv_path_for(repo, filename) do
|
||||||
|
app = Keyword.get(repo.config, :otp_app)
|
||||||
|
repo_underscore = repo |> Module.split() |> List.last() |> Macro.underscore()
|
||||||
|
Path.join([priv_dir(app), repo_underscore, filename])
|
||||||
|
end
|
||||||
|
|
||||||
|
defp run_migrations_for(repo) do
|
||||||
|
app = Keyword.get(repo.config, :otp_app)
|
||||||
|
IO.puts("Running migrations for #{app}")
|
||||||
|
Ecto.Migrator.run(repo, migrations_path(repo), :up, all: true)
|
||||||
|
end
|
||||||
|
|
||||||
|
defp prepare() do
|
||||||
|
me = myapp()
|
||||||
|
|
||||||
|
# Load the code for myapp, but don't start it
|
||||||
|
IO.puts("Loading #{me}...")
|
||||||
|
:ok = Application.load(me)
|
||||||
|
|
||||||
|
# Start apps necessary for executing migrations
|
||||||
|
IO.puts("Starting dependencies...")
|
||||||
|
Enum.each(@start_apps, &Application.ensure_all_started/1)
|
||||||
|
|
||||||
|
# Start the Repo(s) for myapp
|
||||||
|
IO.puts("Starting repos...")
|
||||||
|
Enum.each(repos(), & &1.start_link(pool_size: 1))
|
||||||
|
end
|
||||||
|
end
|
5
mix.exs
5
mix.exs
|
@ -28,9 +28,10 @@ defmodule Tilastokeskus.MixProject do
|
||||||
{:postgrex, ">= 0.0.0"},
|
{:postgrex, ">= 0.0.0"},
|
||||||
{:ecto, "~> 2.2"},
|
{:ecto, "~> 2.2"},
|
||||||
{:jason, "~> 1.0"},
|
{:jason, "~> 1.0"},
|
||||||
{:ua_inspector, "~> 0.17"},
|
{:ua_inspector, github: "elixytics/ua_inspector"},
|
||||||
{:geolix, "~> 0.16.0"},
|
{:geolix, "~> 0.16.0"},
|
||||||
{:geolite2data, "~> 0.0.3"}
|
{:geolite2data, "~> 0.0.3"},
|
||||||
|
{:distillery, "~> 1.5", runtime: false}
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
7
mix.lock
7
mix.lock
|
@ -5,12 +5,13 @@
|
||||||
"cookie": {:hex, :cookie, "0.1.1", "89438362ee0f0ed400e9f076d617d630f82d682e3fbcf767072a46a6e1ed5781", [:mix], [], "hexpm"},
|
"cookie": {:hex, :cookie, "0.1.1", "89438362ee0f0ed400e9f076d617d630f82d682e3fbcf767072a46a6e1ed5781", [:mix], [], "hexpm"},
|
||||||
"db_connection": {:hex, :db_connection, "1.1.3", "89b30ca1ef0a3b469b1c779579590688561d586694a3ce8792985d4d7e575a61", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}, {:poolboy, "~> 1.5", [hex: :poolboy, repo: "hexpm", optional: true]}, {:sbroker, "~> 1.0", [hex: :sbroker, repo: "hexpm", optional: true]}], "hexpm"},
|
"db_connection": {:hex, :db_connection, "1.1.3", "89b30ca1ef0a3b469b1c779579590688561d586694a3ce8792985d4d7e575a61", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}, {:poolboy, "~> 1.5", [hex: :poolboy, repo: "hexpm", optional: true]}, {:sbroker, "~> 1.0", [hex: :sbroker, repo: "hexpm", optional: true]}], "hexpm"},
|
||||||
"decimal": {:hex, :decimal, "1.5.0", "b0433a36d0e2430e3d50291b1c65f53c37d56f83665b43d79963684865beab68", [:mix], [], "hexpm"},
|
"decimal": {:hex, :decimal, "1.5.0", "b0433a36d0e2430e3d50291b1c65f53c37d56f83665b43d79963684865beab68", [:mix], [], "hexpm"},
|
||||||
|
"distillery": {:hex, :distillery, "1.5.3", "b2f4fc34ec71ab4f1202a796f9290e068883b042319aa8c9aa45377ecac8597a", [:mix], [], "hexpm"},
|
||||||
"ecto": {:hex, :ecto, "2.2.10", "e7366dc82f48f8dd78fcbf3ab50985ceeb11cb3dc93435147c6e13f2cda0992e", [:mix], [{:db_connection, "~> 1.1", [hex: :db_connection, repo: "hexpm", optional: true]}, {:decimal, "~> 1.2", [hex: :decimal, repo: "hexpm", optional: false]}, {:mariaex, "~> 0.8.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:poison, "~> 2.2 or ~> 3.0", [hex: :poison, repo: "hexpm", optional: true]}, {:poolboy, "~> 1.5", [hex: :poolboy, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.13.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:sbroker, "~> 1.0", [hex: :sbroker, repo: "hexpm", optional: true]}], "hexpm"},
|
"ecto": {:hex, :ecto, "2.2.10", "e7366dc82f48f8dd78fcbf3ab50985ceeb11cb3dc93435147c6e13f2cda0992e", [:mix], [{:db_connection, "~> 1.1", [hex: :db_connection, repo: "hexpm", optional: true]}, {:decimal, "~> 1.2", [hex: :decimal, repo: "hexpm", optional: false]}, {:mariaex, "~> 0.8.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:poison, "~> 2.2 or ~> 3.0", [hex: :poison, repo: "hexpm", optional: true]}, {:poolboy, "~> 1.5", [hex: :poolboy, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.13.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:sbroker, "~> 1.0", [hex: :sbroker, repo: "hexpm", optional: true]}], "hexpm"},
|
||||||
"geolite2data": {:hex, :geolite2data, "0.0.3", "829acdaa56cc8a23909bd557c55e0bd158d03413e11d912ac44e980da70107f3", [:rebar3], [], "hexpm"},
|
"geolite2data": {:hex, :geolite2data, "0.0.3", "829acdaa56cc8a23909bd557c55e0bd158d03413e11d912ac44e980da70107f3", [:rebar3], [], "hexpm"},
|
||||||
"geolix": {:hex, :geolix, "0.16.0", "0095f5e828c0b46596216efaf6a4d46aba3f1a4da3bdfec735b2e49c8cd908fb", [:mix], [{:mmdb2_decoder, "~> 0.2.0", [hex: :mmdb2_decoder, repo: "hexpm", optional: false]}, {:poolboy, "~> 1.0", [hex: :poolboy, repo: "hexpm", optional: false]}], "hexpm"},
|
"geolix": {:hex, :geolix, "0.16.0", "0095f5e828c0b46596216efaf6a4d46aba3f1a4da3bdfec735b2e49c8cd908fb", [:mix], [{:mmdb2_decoder, "~> 0.2.0", [hex: :mmdb2_decoder, repo: "hexpm", optional: false]}, {:poolboy, "~> 1.0", [hex: :poolboy, repo: "hexpm", optional: false]}], "hexpm"},
|
||||||
"hackney": {:hex, :hackney, "1.12.1", "8bf2d0e11e722e533903fe126e14d6e7e94d9b7983ced595b75f532e04b7fdc7", [:rebar3], [{:certifi, "2.3.1", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "5.1.1", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"},
|
"hackney": {:hex, :hackney, "1.13.0", "24edc8cd2b28e1c652593833862435c80661834f6c9344e84b6a2255e7aeef03", [:rebar3], [{:certifi, "2.3.1", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "5.1.2", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"},
|
||||||
"hpack": {:hex, :hpack_erl, "0.2.3", "17670f83ff984ae6cd74b1c456edde906d27ff013740ee4d9efaa4f1bf999633", [:rebar3], [], "hexpm"},
|
"hpack": {:hex, :hpack_erl, "0.2.3", "17670f83ff984ae6cd74b1c456edde906d27ff013740ee4d9efaa4f1bf999633", [:rebar3], [], "hexpm"},
|
||||||
"idna": {:hex, :idna, "5.1.1", "cbc3b2fa1645113267cc59c760bafa64b2ea0334635ef06dbac8801e42f7279c", [:rebar3], [{:unicode_util_compat, "0.3.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm"},
|
"idna": {:hex, :idna, "5.1.2", "e21cb58a09f0228a9e0b95eaa1217f1bcfc31a1aaa6e1fdf2f53a33f7dbd9494", [:rebar3], [{:unicode_util_compat, "0.3.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm"},
|
||||||
"jason": {:hex, :jason, "1.0.0", "0f7cfa9bdb23fed721ec05419bcee2b2c21a77e926bce0deda029b5adc716fe2", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm"},
|
"jason": {:hex, :jason, "1.0.0", "0f7cfa9bdb23fed721ec05419bcee2b2c21a77e926bce0deda029b5adc716fe2", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm"},
|
||||||
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm"},
|
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm"},
|
||||||
"mime": {:hex, :mime, "1.3.0", "5e8d45a39e95c650900d03f897fbf99ae04f60ab1daa4a34c7a20a5151b7a5fe", [:mix], [], "hexpm"},
|
"mime": {:hex, :mime, "1.3.0", "5e8d45a39e95c650900d03f897fbf99ae04f60ab1daa4a34c7a20a5151b7a5fe", [:mix], [], "hexpm"},
|
||||||
|
@ -22,7 +23,7 @@
|
||||||
"raxx": {:hex, :raxx, "0.15.4", "62e4a487e55e9469d1ba2d5de590672167f51eaac310f027f3f871018cb6a9fc", [:mix], [{:cookie, "~> 0.1.0", [hex: :cookie, repo: "hexpm", optional: false]}], "hexpm"},
|
"raxx": {:hex, :raxx, "0.15.4", "62e4a487e55e9469d1ba2d5de590672167f51eaac310f027f3f871018cb6a9fc", [:mix], [{:cookie, "~> 0.1.0", [hex: :cookie, repo: "hexpm", optional: false]}], "hexpm"},
|
||||||
"raxx_static": {:hex, :raxx_static, "0.6.1", "8b48254fc3d1b8b1e473b7c307fbba0ae767c60482754ce823c664544c85d729", [:mix], [{:mime, "~> 1.1", [hex: :mime, repo: "hexpm", optional: false]}, {:raxx, "~> 0.15.2", [hex: :raxx, repo: "hexpm", optional: false]}], "hexpm"},
|
"raxx_static": {:hex, :raxx_static, "0.6.1", "8b48254fc3d1b8b1e473b7c307fbba0ae767c60482754ce823c664544c85d729", [:mix], [{:mime, "~> 1.1", [hex: :mime, repo: "hexpm", optional: false]}, {:raxx, "~> 0.15.2", [hex: :raxx, repo: "hexpm", optional: false]}], "hexpm"},
|
||||||
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], [], "hexpm"},
|
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], [], "hexpm"},
|
||||||
"ua_inspector": {:hex, :ua_inspector, "0.17.0", "5f943d6a61baf520f79fc04f85eb0dc35ea851634453df25f0040dbd0672a2b6", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:poolboy, "~> 1.0", [hex: :poolboy, repo: "hexpm", optional: false]}, {:yamerl, "~> 0.6", [hex: :yamerl, repo: "hexpm", optional: false]}], "hexpm"},
|
"ua_inspector": {:git, "https://github.com/elixytics/ua_inspector.git", "3cd8fb927d5e14241a6646468f6a19e57afdaccb", []},
|
||||||
"unicode_util_compat": {:hex, :unicode_util_compat, "0.3.1", "a1f612a7b512638634a603c8f401892afbf99b8ce93a45041f8aaca99cadb85e", [:rebar3], [], "hexpm"},
|
"unicode_util_compat": {:hex, :unicode_util_compat, "0.3.1", "a1f612a7b512638634a603c8f401892afbf99b8ce93a45041f8aaca99cadb85e", [:rebar3], [], "hexpm"},
|
||||||
"yamerl": {:hex, :yamerl, "0.7.0", "e51dba652dce74c20a88294130b48051ebbbb0be7d76f22de064f0f3ccf0aaf5", [:rebar3], [], "hexpm"},
|
"yamerl": {:hex, :yamerl, "0.7.0", "e51dba652dce74c20a88294130b48051ebbbb0be7d76f22de064f0f3ccf0aaf5", [:rebar3], [], "hexpm"},
|
||||||
}
|
}
|
||||||
|
|
3
rel/commands/migrate.sh
Normal file
3
rel/commands/migrate.sh
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
$RELEASE_ROOT_DIR/bin/tilastokeskus command Tilastokeskus.Archive.ReleaseMigrator migrate
|
57
rel/config.exs
Normal file
57
rel/config.exs
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
# Import all plugins from `rel/plugins`
|
||||||
|
# They can then be used by adding `plugin MyPlugin` to
|
||||||
|
# either an environment, or release definition, where
|
||||||
|
# `MyPlugin` is the name of the plugin module.
|
||||||
|
Path.join(["rel", "plugins", "*.exs"])
|
||||||
|
|> Path.wildcard()
|
||||||
|
|> Enum.map(&Code.eval_file(&1))
|
||||||
|
|
||||||
|
use Mix.Releases.Config,
|
||||||
|
# This sets the default release built by `mix release`
|
||||||
|
default_release: :default,
|
||||||
|
# This sets the default environment used by `mix release`
|
||||||
|
default_environment: Mix.env()
|
||||||
|
|
||||||
|
# For a full list of config options for both releases
|
||||||
|
# and environments, visit https://hexdocs.pm/distillery/configuration.html
|
||||||
|
|
||||||
|
# You may define one or more environments in this file,
|
||||||
|
# an environment's settings will override those of a release
|
||||||
|
# when building in that environment, this combination of release
|
||||||
|
# and environment configuration is called a profile
|
||||||
|
|
||||||
|
environment :dev do
|
||||||
|
# If you are running Phoenix, you should make sure that
|
||||||
|
# server: true is set and the code reloader is disabled,
|
||||||
|
# even in dev mode.
|
||||||
|
# It is recommended that you build with MIX_ENV=prod and pass
|
||||||
|
# the --env flag to Distillery explicitly if you want to use
|
||||||
|
# dev mode.
|
||||||
|
set(dev_mode: true)
|
||||||
|
set(include_erts: false)
|
||||||
|
set(cookie: :"aQ>GltT$~Qlzf:4/B<$5Mnoug~c(k%hrd_FVsmp1)r4t}lFiz_A4<8i>MiOyH^YV")
|
||||||
|
end
|
||||||
|
|
||||||
|
environment :prod do
|
||||||
|
set(include_erts: true)
|
||||||
|
set(include_src: false)
|
||||||
|
set(cookie: System.get_env("COOKIE") |> String.to_atom())
|
||||||
|
end
|
||||||
|
|
||||||
|
# You may define one or more releases in this file.
|
||||||
|
# If you have not set a default release, or selected one
|
||||||
|
# when running `mix release`, the first release in the file
|
||||||
|
# will be used by default
|
||||||
|
|
||||||
|
release :tilastokeskus do
|
||||||
|
set(version: current_version(:tilastokeskus))
|
||||||
|
|
||||||
|
set(
|
||||||
|
applications: [
|
||||||
|
:runtime_tools
|
||||||
|
],
|
||||||
|
commands: [
|
||||||
|
migrate: "rel/commands/migrate.sh"
|
||||||
|
]
|
||||||
|
)
|
||||||
|
end
|
Loading…
Reference in a new issue