store the email file in the global config directory instead of the local data.ms so it's shared between all instances

This commit is contained in:
Tamo 2025-06-05 16:01:30 +02:00
parent 204cf423b2
commit 765e76857f
2 changed files with 15 additions and 7 deletions

View file

@ -45,7 +45,7 @@ macro_rules! empty_analytics {
/// `~/.config/Meilisearch` on *NIX or *BSD.
/// `~/Library/ApplicationSupport` on macOS.
/// `%APPDATA` (= `C:\Users%USERNAME%\AppData\Roaming`) on windows.
static MEILISEARCH_CONFIG_PATH: Lazy<Option<PathBuf>> =
pub static MEILISEARCH_CONFIG_PATH: Lazy<Option<PathBuf>> =
Lazy::new(|| AppDirs::new(Some("Meilisearch"), false).map(|appdir| appdir.config_dir));
fn config_user_id_path(db_path: &Path) -> Option<PathBuf> {

View file

@ -12,7 +12,7 @@ use actix_web::web::Data;
use actix_web::HttpServer;
use index_scheduler::IndexScheduler;
use is_terminal::IsTerminal;
use meilisearch::analytics::Analytics;
use meilisearch::analytics::{Analytics, MEILISEARCH_CONFIG_PATH};
use meilisearch::option::LogMode;
use meilisearch::search_queue::SearchQueue;
use meilisearch::{
@ -132,12 +132,14 @@ async fn try_main() -> anyhow::Result<()> {
let (index_scheduler, auth_controller) = setup_meilisearch(&opt)?;
// We ask users their emails just after the data.ms is created
let skip_email_path = opt.db_path.join(SKIP_EMAIL_FILENAME);
let skip_email_path = MEILISEARCH_CONFIG_PATH.as_ref().map(|conf| conf.join(SKIP_EMAIL_FILENAME));
// If the config path does not exist, it means the user don't have a home directory
let skip_email = skip_email_path.as_ref().map_or(true, |path| path.exists());
opt.contact_email = match opt.contact_email.as_ref().map(|email| email.as_deref()) {
Some(Some("false")) | None if !skip_email_path.exists() => {
Some(Some("false")) | None if !skip_email => {
prompt_for_contact_email().await.map(Some)?
}
Some(Some(email)) if !skip_email_path.exists() => Some(Some(email.to_string())),
Some(Some(email)) if !skip_email => Some(Some(email.to_string())),
_otherwise => None,
};
@ -146,9 +148,15 @@ async fn try_main() -> anyhow::Result<()> {
// We spawn a task to register the email and create the skip email
// file to avoid blocking the Meilisearch launch further.
let _ = tokio::spawn(async move {
if let Some(skip_email_path) = skip_email_path {
// If the analytics are disabled the directory might not exist at all
if let Err(e) = tokio::fs::create_dir_all(skip_email_path.parent().unwrap()).await {
eprintln!("Failed to create skip email file: {e}");
}
if let Err(e) = tokio::fs::File::create_new(skip_email_path).await {
eprintln!("Failed to create skip email file: {e}");
}
}
if let Err(err) = register_contact_email(&email).await {
eprintln!("Failed to register email: {}", err);
}