diff options
| -rw-r--r-- | Cargo.lock | 1 | ||||
| -rw-r--r-- | Cargo.toml | 2 | ||||
| -rw-r--r-- | src/db/mod.rs | 34 |
3 files changed, 22 insertions, 15 deletions
@@ -1575,6 +1575,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d2234cdee9408b523530a9b6d2d6b373d1db34f6a8e51dc03ded1828d7fb67c" dependencies = [ "bytes", + "chrono", "fallible-iterator", "postgres-protocol", ] @@ -48,7 +48,7 @@ symphonia = { version = "0.5", features = ["all"] } diesel = { version = "2.1", features = ["chrono"], optional = true } diesel-async = { version = "0.4", optional = true, features = ["deadpool", "postgres"] } diesel_async_migrations = { version = "0.12", optional = true } -tokio-postgres = { version = "0.7", optional = true } +tokio-postgres = { version = "0.7", optional = true, features = ["with-chrono-0_4"] } deadpool-postgres = { version = "0.13", optional = true } [dependencies.serenity] diff --git a/src/db/mod.rs b/src/db/mod.rs index 5aa0541..336f1f9 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -1,6 +1,7 @@ use std::{ convert::AsRef, env, + str::FromStr, }; use anyhow::anyhow; @@ -40,28 +41,31 @@ use self::schema::*; mod models; mod schema; -const MIGRATIONS: diesel_async_migrations::EmbeddedMigrations = +static MIGRATIONS: diesel_async_migrations::EmbeddedMigrations = diesel_async_migrations::embed_migrations!(); -static MIGRATE: tokio::sync::OnceCell<()> = tokio::sync::OnceCell::new(); lazy_static::lazy_static! { + static ref MIGRATE: tokio::sync::OnceCell<()> = tokio::sync::OnceCell::new(); + static ref DB_URL: String = env::var("DATABASE_URL").expect("no database url in environment"); static ref POOL: Pool<AsyncPgConnection> = { + println!("{}", *DB_URL); let cfg = AsyncDieselConnectionManager::new(DB_URL.clone()); - - let pool = Pool::builder(cfg).build().unwrap(); - - pool + Pool::builder(cfg).build().unwrap() }; static ref RAW_CONN_MGR: RawPgConnMgr = { - deadpool_postgres::Config::new() - .builder(tokio_postgres::NoTls).expect("failed to init config") - .config(PoolConfig::new(8)) - .build().expect("failed to build pool") + let pg_conf = tokio_postgres::Config::from_str(&DB_URL).expect("parsing db url"); + let mgr_conf = deadpool_postgres::ManagerConfig { + recycling_method: deadpool_postgres::RecyclingMethod::Fast, + }; + + let mgr = deadpool_postgres::Manager::from_config(pg_conf, tokio_postgres::NoTls, mgr_conf); + + RawPgConnMgr::builder(mgr).config(PoolConfig::new(8)).build().expect("failed to build pool") }; } @@ -123,7 +127,7 @@ pub async fn query_meme<T: AsRef<str>>( user_id: Option<u64>, age_desc: bool, ) -> Result<Vec<(Meme, Metadata)>> { - let mut raw_conn = raw_connection().await?; + let raw_conn = raw_connection().await?; let search = format!("%{}%", search.as_ref()); @@ -277,8 +281,10 @@ pub async fn rare_meme(conn: &mut AsyncPgConnection, audio: bool) -> Result<Meme return Err(anyhow!("no rare memes found")); } - let mut rng = thread_rng(); - let target_prob = rng.gen_range(0..elems.last().unwrap().1); + let target_prob = { + let mut rng = thread_rng(); + rng.gen_range(0..elems.last().unwrap().1) + }; let meme_id = elems .into_iter() @@ -452,7 +458,7 @@ pub async fn stats(conn: &mut AsyncPgConnection) -> Result<Stats> { .await .map_err(Error::from)?; - let mut raw_conn = raw_connection().await?; + let raw_conn = raw_connection().await?; let row = raw_conn .query_one( |
