]> Untitled Git - lemmy.git/commitdiff
Adding a configurable config location through an env var. (#960)
authorDessalines <dessalines@users.noreply.github.com>
Mon, 13 Jul 2020 15:33:48 +0000 (11:33 -0400)
committerGitHub <noreply@github.com>
Mon, 13 Jul 2020 15:33:48 +0000 (11:33 -0400)
* 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

docs/src/administration_configuration.md
server/lemmy_utils/src/settings.rs

index 56448de46e8ad60047b9db8c401c0fdfc977a762..cc4c568987a4d0b309d9ed8cf0eb9a66937f4316 100644 (file)
@@ -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`.
index 2ce33f58c58d0896a9c1caef781370e62b78493c..0607974f94f25e1d02c766201535ee07cb78c989 100644 (file)
@@ -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