musicus/musicus_server/src/database/mod.rs

47 lines
1.1 KiB
Rust
Raw Normal View History

2020-11-14 23:08:37 +01:00
use anyhow::Result;
use diesel::r2d2;
use diesel::PgConnection;
pub mod ensembles;
pub use ensembles::*;
pub mod instruments;
pub use instruments::*;
pub mod persons;
pub use persons::*;
pub mod recordings;
pub use recordings::*;
pub mod users;
pub use users::*;
pub mod works;
pub use works::*;
mod schema;
2020-11-29 18:58:50 +01:00
// This makes the SQL migration scripts accessible from the code.
embed_migrations!();
2020-11-14 23:08:37 +01:00
/// A pool of connections to the database.
pub type DbPool = r2d2::Pool<r2d2::ConnectionManager<PgConnection>>;
/// One database connection from the connection pool.
pub type DbConn = r2d2::PooledConnection<r2d2::ConnectionManager<PgConnection>>;
/// Create a connection pool for a database. This will look for the database URL in the
/// "MUSICUS_DATABASE_URL" environment variable and fail, if that is not set.
pub fn connect() -> Result<DbPool> {
let url = std::env::var("MUSICUS_DATABASE_URL")?;
let manager = r2d2::ConnectionManager::<PgConnection>::new(url);
let pool = r2d2::Pool::new(manager)?;
2020-11-29 18:58:50 +01:00
// Run embedded migrations.
let conn = pool.get()?;
embedded_migrations::run(&conn)?;
2020-11-14 23:08:37 +01:00
Ok(pool)
}