mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-11-26 06:44:27 +01:00
Support MEILI_CONFIG_FILE_PATH to define config file path
Close #2800 This is an alternative to the `--config-file-path` option. If both `--config-file-path` and `MEILI_CONFIG_FILE_PATH` are present, `--config-file-path` takes precedence according to the "Priority order" section of #2558.
This commit is contained in:
parent
1b72eba1f3
commit
2681e92d4e
@ -1,3 +1,4 @@
|
|||||||
|
use std::env;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::io::{BufReader, Read};
|
use std::io::{BufReader, Read};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
@ -51,6 +52,7 @@ const MEILI_LOG_LEVEL: &str = "MEILI_LOG_LEVEL";
|
|||||||
#[cfg(feature = "metrics")]
|
#[cfg(feature = "metrics")]
|
||||||
const MEILI_ENABLE_METRICS_ROUTE: &str = "MEILI_ENABLE_METRICS_ROUTE";
|
const MEILI_ENABLE_METRICS_ROUTE: &str = "MEILI_ENABLE_METRICS_ROUTE";
|
||||||
|
|
||||||
|
const DEFAULT_CONFIG_FILE_PATH: &str = "./config.yml";
|
||||||
const DEFAULT_DB_PATH: &str = "./data.ms";
|
const DEFAULT_DB_PATH: &str = "./data.ms";
|
||||||
const DEFAULT_HTTP_ADDR: &str = "127.0.0.1:7700";
|
const DEFAULT_HTTP_ADDR: &str = "127.0.0.1:7700";
|
||||||
const DEFAULT_ENV: &str = "development";
|
const DEFAULT_ENV: &str = "development";
|
||||||
@ -261,33 +263,33 @@ impl Opt {
|
|||||||
// Parse the args to get the config_file_path.
|
// Parse the args to get the config_file_path.
|
||||||
let mut opts = Opt::parse();
|
let mut opts = Opt::parse();
|
||||||
let mut config_read_from = None;
|
let mut config_read_from = None;
|
||||||
if let Some(config_file_path) = opts
|
let config_file_path = opts
|
||||||
.config_file_path
|
.config_file_path
|
||||||
.clone()
|
.clone()
|
||||||
.or_else(|| Some(PathBuf::from("./config.toml")))
|
.or_else(|| env::var("MEILI_CONFIG_FILE_PATH").map(PathBuf::from).ok())
|
||||||
{
|
.unwrap_or_else(|| PathBuf::from(DEFAULT_CONFIG_FILE_PATH));
|
||||||
match std::fs::read(&config_file_path) {
|
|
||||||
Ok(config) => {
|
match std::fs::read(&config_file_path) {
|
||||||
// If the file is successfully read, we deserialize it with `toml`.
|
Ok(config) => {
|
||||||
let opt_from_config = toml::from_slice::<Opt>(&config)?;
|
// If the file is successfully read, we deserialize it with `toml`.
|
||||||
// Return an error if config file contains 'config_file_path'
|
let opt_from_config = toml::from_slice::<Opt>(&config)?;
|
||||||
// Using that key in the config file doesn't make sense bc it creates a logical loop (config file referencing itself)
|
// Return an error if config file contains 'config_file_path'
|
||||||
if opt_from_config.config_file_path.is_some() {
|
// Using that key in the config file doesn't make sense bc it creates a logical loop (config file referencing itself)
|
||||||
anyhow::bail!("`config_file_path` is not supported in config file")
|
if opt_from_config.config_file_path.is_some() {
|
||||||
}
|
anyhow::bail!("`config_file_path` is not supported in config file")
|
||||||
// We inject the values from the toml in the corresponding env vars if needs be. Doing so, we respect the priority toml < env vars < cli args.
|
|
||||||
opt_from_config.export_to_env();
|
|
||||||
// Once injected we parse the cli args once again to take the new env vars into scope.
|
|
||||||
opts = Opt::parse();
|
|
||||||
config_read_from = Some(config_file_path);
|
|
||||||
}
|
}
|
||||||
// If we have an error while reading the file defined by the user.
|
// We inject the values from the toml in the corresponding env vars if needs be. Doing so, we respect the priority toml < env vars < cli args.
|
||||||
Err(_) if opts.config_file_path.is_some() => anyhow::bail!(
|
opt_from_config.export_to_env();
|
||||||
"unable to open or read the {:?} configuration file.",
|
// Once injected we parse the cli args once again to take the new env vars into scope.
|
||||||
opts.config_file_path.unwrap().display().to_string()
|
opts = Opt::parse();
|
||||||
),
|
config_read_from = Some(config_file_path);
|
||||||
_ => (),
|
|
||||||
}
|
}
|
||||||
|
// If we have an error while reading the file defined by the user.
|
||||||
|
Err(_) if opts.config_file_path.is_some() => anyhow::bail!(
|
||||||
|
"unable to open or read the {:?} configuration file.",
|
||||||
|
opts.config_file_path.unwrap().display().to_string()
|
||||||
|
),
|
||||||
|
_ => (),
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok((opts, config_read_from))
|
Ok((opts, config_read_from))
|
||||||
|
Loading…
Reference in New Issue
Block a user