summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDessalines <dessalines@users.noreply.github.com>2020-07-13 11:33:48 -0400
committerGitHub <noreply@github.com>2020-07-13 11:33:48 -0400
commite5d3e3a9c3e3257aaa5b1febd2893aa169c6c818 (patch)
tree248bd1bd7226a76b53ac5c9480ada6c7dbd15fe9
parentea0881f87e4712810b0c1c7a6e510ba27b118577 (diff)
Adding a configurable config location through an env var. (#960)
* Adding a configurable config location through an env var. - Its `LEMMY_CONFIG_LOCATION` - Fixes #764 * Using a static for CONFIG_FILE again. * Make clippy happy
-rw-r--r--docs/src/administration_configuration.md2
-rw-r--r--server/lemmy_utils/src/settings.rs11
2 files changed, 10 insertions, 3 deletions
diff --git a/docs/src/administration_configuration.md b/docs/src/administration_configuration.md
index 56448de4..cc4c5689 100644
--- a/docs/src/administration_configuration.md
+++ b/docs/src/administration_configuration.md
@@ -5,6 +5,8 @@ The configuration is based on the file
This file also contains documentation for all the available options. To override the defaults, you
can copy the options you want to change into your local `config.hjson` file.
+To use a different `config.hjson` location than the current directory, set the environment variable `LEMMY_CONFIG_LOCATION`.
+
Additionally, you can override any config files with environment variables. These have the same
name as the config options, and are prefixed with `LEMMY_`. For example, you can override the
`database.password` with `LEMMY_DATABASE__POOL_SIZE=10`.
diff --git a/server/lemmy_utils/src/settings.rs b/server/lemmy_utils/src/settings.rs
index 2ce33f58..0607974f 100644
--- a/server/lemmy_utils/src/settings.rs
+++ b/server/lemmy_utils/src/settings.rs
@@ -1,6 +1,7 @@
use config::{Config, ConfigError, Environment, File};
use serde::Deserialize;
use std::{fs, io::Error, net::IpAddr, sync::RwLock};
+use std::env;
static CONFIG_FILE_DEFAULTS: &str = "config/defaults.hjson";
static CONFIG_FILE: &str = "config/config.hjson";
@@ -83,7 +84,7 @@ impl Settings {
s.merge(File::with_name(CONFIG_FILE_DEFAULTS))?;
- s.merge(File::with_name(CONFIG_FILE).required(false))?;
+ s.merge(File::with_name(&Self::get_config_location()).required(false))?;
// Add in settings from the environment (with a prefix of LEMMY)
// Eg.. `LEMMY_DEBUG=1 ./target/app` would set the `debug` key
@@ -115,12 +116,16 @@ impl Settings {
format!("{}/api/v1", self.hostname)
}
+ pub fn get_config_location() -> String {
+ env::var("LEMMY_CONFIG_LOCATION").unwrap_or_else(|_| CONFIG_FILE.to_string())
+ }
+
pub fn read_config_file() -> Result<String, Error> {
- fs::read_to_string(CONFIG_FILE)
+ fs::read_to_string(Self::get_config_location())
}
pub fn save_config_file(data: &str) -> Result<String, Error> {
- fs::write(CONFIG_FILE, data)?;
+ fs::write(Self::get_config_location(), data)?;
// Reload the new settings
// From https://stackoverflow.com/questions/29654927/how-do-i-assign-a-string-to-a-mutable-static-variable/47181804#47181804