From f93ff38767e23602108f86992c453f7973dd8bd0 Mon Sep 17 00:00:00 2001 From: Harald Eilertsen Date: Mon, 4 Mar 2019 15:06:54 +0100 Subject: Set up database and connection pool with rocket_contrib::databases. Set the env var DATABASE_URL before running the server. A .env file in the root of the project is also supported. --- src/main.rs | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/main.rs b/src/main.rs index 5c858aa..e031e73 100644 --- a/src/main.rs +++ b/src/main.rs @@ -17,8 +17,34 @@ */ #![feature(proc_macro_hygiene, decl_macro)] -fn main() { - rocket::ignite() +use rocket_contrib::{ + database, + databases::diesel, +}; +use std::collections::HashMap; +use std::error::Error; +use std::result::Result; + +#[database("main")] +struct DbConn(diesel::PgConnection); + +fn main() -> Result<(), Box> { + let db_url = dotenv::var("DATABASE_URL") + .map_err(|_| "No database! Set DATABASE_URL env var and try again.")?; + + let mut db_config = HashMap::new(); + db_config.insert("url", rocket::config::Value::from(db_url)); + + let mut databases = HashMap::new(); + databases.insert("main", rocket::config::Value::from(db_config)); + + let mut config = rocket::Config::active()?; + config.extras.insert("databases".into(), rocket::config::Value::from(databases)); + + rocket::custom(config) + .attach(DbConn::fairing()) .mount("/", rocket_contrib::serve::StaticFiles::from("./public")) .launch(); + + Ok(()) } -- cgit v1.2.3