From 13364ab63ca7f9058a04749d3abaf0e088a7c44f Mon Sep 17 00:00:00 2001 From: Sam Samai Date: Wed, 1 Sep 2021 19:59:29 +1000 Subject: [PATCH] Use the database url in Rocket.toml to connect to mysql/postgres --- examples/rocket_example/Cargo.toml | 4 +++- examples/rocket_example/Rocket.toml | 12 ++++++++---- examples/rocket_example/src/sqlx/mod.rs | 3 ++- src/driver/rocket_db.rs | 23 +++++++++++++---------- 4 files changed, 26 insertions(+), 16 deletions(-) diff --git a/examples/rocket_example/Cargo.toml b/examples/rocket_example/Cargo.toml index a8d4e736..4e645dfb 100644 --- a/examples/rocket_example/Cargo.toml +++ b/examples/rocket_example/Cargo.toml @@ -5,7 +5,9 @@ edition = "2018" publish = false [workspace] [dependencies] -rocket = { git = "https://github.com/SergioBenitez/Rocket.git", features = ["json"] } +rocket = { git = "https://github.com/SergioBenitez/Rocket.git", features = [ + "json", +] } rocket_db_pools = { git = "https://github.com/SergioBenitez/Rocket.git", features = [] } sea-orm = { path = "../../", features = ["web-api-rocket"] } sea-query = { version = "^0.12.8" } diff --git a/examples/rocket_example/Rocket.toml b/examples/rocket_example/Rocket.toml index 0fe9f8eb..bf5098f8 100644 --- a/examples/rocket_example/Rocket.toml +++ b/examples/rocket_example/Rocket.toml @@ -1,5 +1,9 @@ -# [default.databases.sqlx] -# url = "sqlite::memory:" +[default.databases.rocket_example] -[global.databases] -blog = { url = "sqlite::memory:" } +# Mysql +# make sure to enable "sqlx-mysql" feature in Cargo.toml, i.e default = ["sqlx-mysql"] +# url = "mysql://root:@localhost/rocket_example" + +# Postgres +# make sure to enable "sqlx-postgres" feature in Cargo.toml, i.e default = ["sqlx-postgres"] +url = "postgres://root:root@localhost/rocket_example" diff --git a/examples/rocket_example/src/sqlx/mod.rs b/examples/rocket_example/src/sqlx/mod.rs index 1b43ea67..6273a49d 100644 --- a/examples/rocket_example/src/sqlx/mod.rs +++ b/examples/rocket_example/src/sqlx/mod.rs @@ -4,12 +4,13 @@ use rocket::serde::json::Json; use rocket::{Build, Rocket}; use rocket_db_pools::{sqlx, Connection, Database}; use sea_orm::entity::*; +use sea_orm::RocketDbPool; mod setup; #[derive(Database, Debug)] #[database("rocket_example")] -struct Db(sea_orm::Database); +struct Db(RocketDbPool); type Result> = std::result::Result; diff --git a/src/driver/rocket_db.rs b/src/driver/rocket_db.rs index 755a7fec..ac53fdd7 100644 --- a/src/driver/rocket_db.rs +++ b/src/driver/rocket_db.rs @@ -1,24 +1,27 @@ use async_trait::async_trait; use rocket_db_pools::{rocket::figment::Figment, Config, Error}; +#[derive(Debug)] +pub struct RocketDbPool { + db_url: String, +} + #[async_trait] -impl rocket_db_pools::Pool for crate::Database { +impl rocket_db_pools::Pool for RocketDbPool { type Error = crate::DbErr; type Connection = crate::DatabaseConnection; async fn init(figment: &Figment) -> Result { - Ok(crate::Database {}) + let config = figment.extract::().unwrap(); + let db_url = config.url; + + Ok(RocketDbPool { + db_url: db_url.to_owned(), + }) } async fn get(&self) -> Result { - #[cfg(feature = "sqlx-mysql")] - let db_url = "mysql://root:@localhost/rocket_example"; - #[cfg(feature = "sqlx-postgres")] - let db_url = "postgres://root:root@localhost/rocket_example"; - - println!("db_url: {:#?}", db_url); - - Ok(crate::Database::connect(db_url).await.unwrap()) + Ok(crate::Database::connect(&self.db_url).await.unwrap()) } }