diff --git a/docker-compose.yml b/docker-compose.yml index d254472..d63d415 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,7 +9,7 @@ services: - .:/app - cargo-registry:/usr/local/cargo/registry - cargo-git:/usr/local/cargo/git - - ./databases.json:/config/config.json +# - ./databases.json:/config/config.json #- ./databases.toml:/config/config.toml - /var/run/docker.sock:/var/run/docker.sock # - cargo-target:/app/target @@ -21,7 +21,7 @@ services: LOG: debug TZ: "Europe/Paris" # TMPDIR: /scratch - EDGE_KEY: "eyJzZXJ2ZXJVcmwiOiJodHRwOi8vbG9jYWxob3N0Ojg4ODciLCJhZ2VudElkIjoiZDY4MzU2MTQtNzE2NC00OTQ4LWJlZjMtMTlkZDc5NGQzYmRhIiwibWFzdGVyS2V5QjY0IjoiV2NiM0pQQkVTaFBjRjg5UXZwRVJuamU4NGZmak1kNm4vS2dJOUpjMCtmVT0ifQ==" + EDGE_KEY: "eyJzZXJ2ZXJVcmwiOiJodHRwOi8vbG9jYWxob3N0Ojg4ODciLCJhZ2VudElkIjoiZjlkZjhiNWYtM2I0MC00NWM3LWI3N2UtYzY4NzQ1YmU2NjMwIiwibWFzdGVyS2V5QjY0IjoiQlhWM1hvbEM2NTZTVjdkTmdjV1BHUWxrKytycExJNmxHRGk3Q1BCNWllbz0ifQ==" #CHUNK_SIZE_MB: "1" #POOLING: 1 #DATABASES_CONFIG_FILE: "config.toml" diff --git a/docker/Dockerfile b/docker/Dockerfile index 5bdc77e..221c393 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -142,6 +142,8 @@ RUN curl -sSL https://dot.net/v1/dotnet-install.sh -o /tmp/dotnet-install.sh \ WORKDIR /app +RUN mkdir -p /config + COPY --from=builder /app/target/release/app /usr/local/bin/app COPY --from=builder /app/version.env /app/version.env COPY entrypoint.sh /entrypoint.sh diff --git a/src/services/config.rs b/src/services/config.rs index b58ae65..9819632 100644 --- a/src/services/config.rs +++ b/src/services/config.rs @@ -207,16 +207,19 @@ impl ConfigService { ConfigService { ctx } } - pub fn load(&self, file_path: Option<&str>) -> Result { - let path: String = if let Some(fp) = file_path { - fp.to_string() - } else { - format!( + fn resolve_path(file_path: Option<&str>) -> String { + match file_path { + Some(fp) => fp.to_string(), + None => format!( "{}/{}", crate::settings::CONFIG.data_path, crate::settings::CONFIG.databases_config_file - ) - }; + ), + } + } + + pub fn load(&self, file_path: Option<&str>) -> Result { + let path = Self::resolve_path(file_path); info!("Loading databases config from: {}", path); @@ -260,6 +263,18 @@ impl ConfigService { } pub fn load_optional(&self, file_path: Option<&str>) -> DatabasesConfig { + let path = Self::resolve_path(file_path); + + if !Path::new(&path).exists() { + info!( + "No local databases config at {}; using dashboard-defined databases only", + path + ); + return DatabasesConfig { + databases: Vec::new(), + }; + } + self.load(file_path).unwrap_or_else(|e| { tracing::warn!( "Local databases config unavailable ({e}); continuing with dashboard-defined databases only" diff --git a/src/services/dashboard_config.rs b/src/services/dashboard_config.rs index c6ef9b1..851a2c8 100644 --- a/src/services/dashboard_config.rs +++ b/src/services/dashboard_config.rs @@ -46,6 +46,9 @@ pub fn persist_cache(path: &Path, databases: &[DatabaseConfig]) -> std::io::Resu }; let json = serde_json::to_string_pretty(&wrapper) .map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidData, e))?; + if let Some(parent) = path.parent() { + std::fs::create_dir_all(parent)?; + } let tmp = path.with_extension("json.tmp"); std::fs::write(&tmp, json)?; std::fs::rename(&tmp, path)?;