fix(database): handle errors in config parsin or database creation
Showing the user a backtrace can be pretty confusing, so just printing a nice error message makes errors easier to understand for end users. fixes #121next
parent
0737bc021f
commit
51245d34f1
|
@ -198,6 +198,11 @@ impl Database {
|
||||||
pub async fn load_or_create(config: &Config) -> Result<Arc<TokioRwLock<Self>>> {
|
pub async fn load_or_create(config: &Config) -> Result<Arc<TokioRwLock<Self>>> {
|
||||||
Self::check_sled_or_sqlite_db(&config)?;
|
Self::check_sled_or_sqlite_db(&config)?;
|
||||||
|
|
||||||
|
if !Path::new(&config.database_path).exists() {
|
||||||
|
std::fs::create_dir_all(&config.database_path)
|
||||||
|
.map_err(|_| Error::BadConfig("Database folder doesn't exists and couldn't be created (e.g. due to missing permissions). Please create the database folder yourself."))?;
|
||||||
|
}
|
||||||
|
|
||||||
let builder = Engine::open(&config)?;
|
let builder = Engine::open(&config)?;
|
||||||
|
|
||||||
if config.max_request_size < 1024 {
|
if config.max_request_size < 1024 {
|
||||||
|
|
23
src/main.rs
23
src/main.rs
|
@ -199,16 +199,27 @@ async fn main() {
|
||||||
|
|
||||||
std::env::set_var("RUST_LOG", "warn");
|
std::env::set_var("RUST_LOG", "warn");
|
||||||
|
|
||||||
let config = raw_config
|
let config = match raw_config.extract::<Config>() {
|
||||||
.extract::<Config>()
|
Ok(s) => s,
|
||||||
.expect("It looks like your config is invalid. Please take a look at the error");
|
Err(e) => {
|
||||||
|
eprintln!("It looks like your config is invalid. The following error occured while parsing it: {}", e);
|
||||||
|
std::process::exit(1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
let start = async {
|
let start = async {
|
||||||
config.warn_deprecated();
|
config.warn_deprecated();
|
||||||
|
|
||||||
let db = Database::load_or_create(&config)
|
let db = match Database::load_or_create(&config).await {
|
||||||
.await
|
Ok(db) => db,
|
||||||
.expect("config is valid");
|
Err(e) => {
|
||||||
|
eprintln!(
|
||||||
|
"The database couldn't be loaded or created. The following error occured: {}",
|
||||||
|
e
|
||||||
|
);
|
||||||
|
std::process::exit(1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
let rocket = setup_rocket(raw_config, Arc::clone(&db))
|
let rocket = setup_rocket(raw_config, Arc::clone(&db))
|
||||||
.ignite()
|
.ignite()
|
||||||
|
|
Loading…
Reference in New Issue