commit 23c2921690f9b735eb30615cf8d89f26754a5682
parent bfa82225da9a6de941affdba948ed268e47bdb94
Author: Daniel GarcĂa <dani-garcia@users.noreply.github.com>
Date: Thu, 1 Dec 2022 22:36:01 +0100
Merge branch 'stefan0xC-check-sqlite-folder'
Diffstat:
2 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/src/config.rs b/src/config.rs
@@ -638,7 +638,15 @@ make_config! {
fn validate_config(cfg: &ConfigItems) -> Result<(), Error> {
// Validate connection URL is valid and DB feature is enabled
- DbConnType::from_url(&cfg.database_url)?;
+ let url = &cfg.database_url;
+ if DbConnType::from_url(url)? == DbConnType::sqlite && url.contains('/') {
+ let path = std::path::Path::new(&url);
+ if let Some(parent) = path.parent() {
+ if !parent.is_dir() {
+ err!(format!("SQLite database directory `{}` does not exist or is not a directory", parent.display()));
+ }
+ }
+ }
let limit = 256;
if cfg.database_max_conns < 1 || cfg.database_max_conns > limit {
diff --git a/src/db/mod.rs b/src/db/mod.rs
@@ -424,22 +424,15 @@ mod sqlite_migrations {
pub const MIGRATIONS: EmbeddedMigrations = embed_migrations!("migrations/sqlite");
pub fn run_migrations() -> Result<(), super::Error> {
- // Make sure the directory exists
+ use diesel::{Connection, RunQueryDsl};
let url = crate::CONFIG.database_url();
- let path = std::path::Path::new(&url);
- if let Some(parent) = path.parent() {
- if std::fs::create_dir_all(parent).is_err() {
- error!("Error creating database directory");
- std::process::exit(1);
- }
- }
+ // Establish a connection to the sqlite database (this will create a new one, if it does
+ // not exist, and exit if there is an error).
+ let mut connection = diesel::sqlite::SqliteConnection::establish(&url)?;
- use diesel::{Connection, RunQueryDsl};
- // Make sure the database is up to date (create if it doesn't exist, or run the migrations)
- let mut connection = diesel::sqlite::SqliteConnection::establish(&crate::CONFIG.database_url())?;
+ // Run the migrations after successfully establishing a connection
// Disable Foreign Key Checks during migration
-
// Scoped to a connection.
diesel::sql_query("PRAGMA foreign_keys = OFF")
.execute(&mut connection)