@@ -32,16 +32,20 @@ | |||
config :pleroma, configurable_from_database: false | |||
``` | |||
To delete transferred settings from database optional flag `-d` can be used. `<env>` is `prod` by default. | |||
Options: | |||
- `<path>` - where to save migrated config. E.g. `--path=/tmp`. If file saved into non standart folder, you must manually copy file into directory where Pleroma can read it. For OTP install path will be `PLEROMA_CONFIG_PATH` or `/etc/pleroma`. For installation from source - `config` directory in the pleroma folder. | |||
- `<env>` - environment, for which is migrated config. By default is `prod`. | |||
- To delete transferred settings from database optional flag `-d` can be used | |||
=== "OTP" | |||
```sh | |||
./bin/pleroma_ctl config migrate_from_db [--env=<env>] [-d] | |||
./bin/pleroma_ctl config migrate_from_db [--env=<env>] [-d] [--path=<path>] | |||
``` | |||
=== "From Source" | |||
```sh | |||
mix pleroma.config migrate_from_db [--env=<env>] [-d] | |||
mix pleroma.config migrate_from_db [--env=<env>] [-d] [--path=<path>] | |||
``` | |||
## Dump all of the config settings defined in the database | |||
@@ -27,7 +27,7 @@ defmodule Mix.Tasks.Pleroma.Config do | |||
{opts, _} = | |||
OptionParser.parse!(options, | |||
strict: [env: :string, delete: :boolean], | |||
strict: [env: :string, delete: :boolean, path: :string], | |||
aliases: [d: :delete] | |||
) | |||
@@ -259,18 +259,43 @@ defmodule Mix.Tasks.Pleroma.Config do | |||
defp migrate_from_db(opts) do | |||
env = opts[:env] || Pleroma.Config.get(:env) | |||
filename = "#{env}.exported_from_db.secret.exs" | |||
config_path = | |||
if Pleroma.Config.get(:release) do | |||
:config_path | |||
|> Pleroma.Config.get() | |||
|> Path.dirname() | |||
else | |||
"config" | |||
cond do | |||
opts[:path] -> | |||
opts[:path] | |||
Pleroma.Config.get(:release) -> | |||
:config_path | |||
|> Pleroma.Config.get() | |||
|> Path.dirname() | |||
true -> | |||
"config" | |||
end | |||
|> Path.join("#{env}.exported_from_db.secret.exs") | |||
|> Path.join(filename) | |||
file = File.open!(config_path, [:write, :utf8]) | |||
with {:ok, file} <- File.open(config_path, [:write, :utf8]) do | |||
write_config(file, config_path, opts) | |||
shell_info("Database configuration settings have been exported to #{config_path}") | |||
else | |||
_ -> | |||
shell_error("Impossible to save settings to this directory #{Path.dirname(config_path)}") | |||
tmp_config_path = Path.join("/tmp", filename) | |||
file = File.open!(tmp_config_path) | |||
shell_info( | |||
"Saving database configuration settings to #{tmp_config_path}. Copy it to the #{ | |||
Path.dirname(config_path) | |||
} manually." | |||
) | |||
write_config(file, tmp_config_path, opts) | |||
end | |||
end | |||
defp write_config(file, path, opts) do | |||
IO.write(file, config_header()) | |||
ConfigDB | |||
@@ -278,11 +303,7 @@ defmodule Mix.Tasks.Pleroma.Config do | |||
|> Enum.each(&write_and_delete(&1, file, opts[:delete])) | |||
:ok = File.close(file) | |||
System.cmd("mix", ["format", config_path]) | |||
shell_info( | |||
"Database configuration settings have been exported to config/#{env}.exported_from_db.secret.exs" | |||
) | |||
System.cmd("mix", ["format", path]) | |||
end | |||
if Code.ensure_loaded?(Config.Reader) do | |||
@@ -200,6 +200,44 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do | |||
end | |||
end | |||
describe "migrate_from_db/1" do | |||
setup do: clear_config(:configurable_from_database, true) | |||
setup do | |||
insert_config_record(:pleroma, :setting_first, key: "value", key2: ["Activity"]) | |||
insert_config_record(:pleroma, :setting_second, key: "value2", key2: [Repo]) | |||
insert_config_record(:quack, :level, :info) | |||
path = "test/instance_static" | |||
file_path = Path.join(path, "temp.exported_from_db.secret.exs") | |||
on_exit(fn -> File.rm!(file_path) end) | |||
[file_path: file_path] | |||
end | |||
test "with path parameter", %{file_path: file_path} do | |||
MixTask.run(["migrate_from_db", "--env", "temp", "--path", Path.dirname(file_path)]) | |||
file = File.read!(file_path) | |||
assert file =~ "config :pleroma, :setting_first," | |||
assert file =~ "config :pleroma, :setting_second," | |||
assert file =~ "config :quack, :level, :info" | |||
end | |||
test "release", %{file_path: file_path} do | |||
clear_config(:release, true) | |||
clear_config(:config_path, file_path) | |||
MixTask.run(["migrate_from_db", "--env", "temp"]) | |||
file = File.read!(file_path) | |||
assert file =~ "config :pleroma, :setting_first," | |||
assert file =~ "config :pleroma, :setting_second," | |||
assert file =~ "config :quack, :level, :info" | |||
end | |||
end | |||
describe "operations on database config" do | |||
setup do: clear_config(:configurable_from_database, true) | |||