fix for elixir 1.11
authorAlexander Strizhakov <alex.strizhakov@gmail.com>
Tue, 24 Nov 2020 15:44:48 +0000 (18:44 +0300)
committerlain <lain@soykaf.club>
Tue, 22 Dec 2020 20:08:44 +0000 (21:08 +0100)
load runtime configs in releases with config provider

config/releases.exs [deleted file]
lib/pleroma/config/holder.ex
lib/pleroma/config/release_runtime_provider.ex [new file with mode: 0644]
mix.exs

diff --git a/config/releases.exs b/config/releases.exs
deleted file mode 100644 (file)
index 1963676..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-import Config
-
-config :pleroma, :instance, static_dir: "/var/lib/pleroma/static"
-config :pleroma, Pleroma.Uploaders.Local, uploads: "/var/lib/pleroma/uploads"
-config :pleroma, :modules, runtime_dir: "/var/lib/pleroma/modules"
-
-config_path = System.get_env("PLEROMA_CONFIG_PATH") || "/etc/pleroma/config.exs"
-
-config :pleroma, release: true, config_path: config_path
-
-if File.exists?(config_path) do
-  import_config config_path
-else
-  warning = [
-    IO.ANSI.red(),
-    IO.ANSI.bright(),
-    "!!! #{config_path} not found! Please ensure it exists and that PLEROMA_CONFIG_PATH is unset or points to an existing file",
-    IO.ANSI.reset()
-  ]
-
-  IO.puts(warning)
-end
-
-exported_config =
-  config_path
-  |> Path.dirname()
-  |> Path.join("prod.exported_from_db.secret.exs")
-
-if File.exists?(exported_config) do
-  import_config exported_config
-end
index f037d5d483b2298e1b92c4b02ed5fcc056806af9..a99fc0471977c6b8bd9d3d89b69ceeaa9e1e9122 100644 (file)
@@ -9,12 +9,7 @@ defmodule Pleroma.Config.Holder do
   def save_default do
     default_config =
       if System.get_env("RELEASE_NAME") do
-        release_config =
-          [:code.root_dir(), "releases", System.get_env("RELEASE_VSN"), "releases.exs"]
-          |> Path.join()
-          |> Pleroma.Config.Loader.read()
-
-        Pleroma.Config.Loader.merge(@config, release_config)
+        Pleroma.Config.Loader.merge(@config, release_defaults())
       else
         @config
       end
@@ -32,4 +27,16 @@ defmodule Pleroma.Config.Holder do
   def default_config(group, key), do: get_in(get_default(), [group, key])
 
   defp get_default, do: Pleroma.Config.get(:default_config)
+
+  @spec release_defaults() :: keyword()
+  def release_defaults do
+    [
+      pleroma: [
+        {:instance, [static_dir: "/var/lib/pleroma/static"]},
+        {Pleroma.Uploaders.Local, [uploads: "/var/lib/pleroma/uploads"]},
+        {:modules, [runtime_dir: "/var/lib/pleroma/modules"]},
+        {:release, true}
+      ]
+    ]
+  end
 end
diff --git a/lib/pleroma/config/release_runtime_provider.ex b/lib/pleroma/config/release_runtime_provider.ex
new file mode 100644 (file)
index 0000000..8227195
--- /dev/null
@@ -0,0 +1,50 @@
+defmodule Pleroma.Config.ReleaseRuntimeProvider do
+  @moduledoc """
+  Imports `runtime.exs` and `{env}.exported_from_db.secret.exs` for elixir releases.
+  """
+  @behaviour Config.Provider
+
+  @impl true
+  def init(opts), do: opts
+
+  @impl true
+  def load(config, _opts) do
+    with_defaults = Config.Reader.merge(config, Pleroma.Config.Holder.release_defaults())
+
+    config_path = System.get_env("PLEROMA_CONFIG_PATH") || "/etc/pleroma/config.exs"
+
+    with_runtime_config =
+      if File.exists?(config_path) do
+        runtime_config = Config.Reader.read!(config_path)
+
+        with_defaults
+        |> Config.Reader.merge(pleroma: [config_path: config_path])
+        |> Config.Reader.merge(runtime_config)
+      else
+        warning = [
+          IO.ANSI.red(),
+          IO.ANSI.bright(),
+          "!!! #{config_path} not found! Please ensure it exists and that PLEROMA_CONFIG_PATH is unset or points to an existing file",
+          IO.ANSI.reset()
+        ]
+
+        IO.puts(warning)
+        with_defaults
+      end
+
+    exported_config_path =
+      config_path
+      |> Path.dirname()
+      |> Path.join("prod.exported_from_db.secret.exs")
+
+    with_exported =
+      if File.exists?(exported_config_path) do
+        exported_config = Config.Reader.read!(with_runtime_config)
+        Config.Reader.merge(with_runtime_config, exported_config)
+      else
+        with_runtime_config
+      end
+
+    with_exported
+  end
+end
diff --git a/mix.exs b/mix.exs
index d9c262b7c25417978cc3c4e5030a40701892d8ff..3a1fd0b18dc1f31b28aee7fec02d280dddb83500 100644 (file)
--- a/mix.exs
+++ b/mix.exs
@@ -37,7 +37,8 @@ defmodule Pleroma.Mixfile do
         pleroma: [
           include_executables_for: [:unix],
           applications: [ex_syslogger: :load, syslog: :load, eldap: :transient],
-          steps: [:assemble, &put_otp_version/1, &copy_files/1, &copy_nginx_config/1]
+          steps: [:assemble, &put_otp_version/1, &copy_files/1, &copy_nginx_config/1],
+          config_providers: [{Pleroma.Config.ReleaseRuntimeProvider, nil}]
         ]
       ]
     ]