forked from gorb/backend
feat: include migrations in binary
Lets us change the schema and not worry about instance admins having to manually update their DB!
This commit is contained in:
parent
2e1382c1d4
commit
c1885210fb
3 changed files with 21 additions and 5 deletions
|
@ -30,8 +30,9 @@ random-string = "1.1"
|
||||||
actix-ws = "0.3.0"
|
actix-ws = "0.3.0"
|
||||||
futures-util = "0.3.31"
|
futures-util = "0.3.31"
|
||||||
deadpool = "0.12"
|
deadpool = "0.12"
|
||||||
diesel = "2.2"
|
diesel = { version = "2.2", features = ["uuid"] }
|
||||||
diesel-async = { version = "0.5", features = ["deadpool", "postgres"] }
|
diesel-async = { version = "0.5", features = ["deadpool", "postgres", "async-connection-wrapper"] }
|
||||||
|
diesel_migrations = { version = "2.2.0", features = ["postgres"] }
|
||||||
|
|
||||||
[dependencies.tokio]
|
[dependencies.tokio]
|
||||||
version = "1.44"
|
version = "1.44"
|
||||||
|
|
3
build.rs
Normal file
3
build.rs
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
fn main() {
|
||||||
|
println!("cargo:rerun-if-changed=migrations");
|
||||||
|
}
|
18
src/main.rs
18
src/main.rs
|
@ -5,14 +5,16 @@ use clap::Parser;
|
||||||
use simple_logger::SimpleLogger;
|
use simple_logger::SimpleLogger;
|
||||||
use diesel_async::pooled_connection::AsyncDieselConnectionManager;
|
use diesel_async::pooled_connection::AsyncDieselConnectionManager;
|
||||||
use diesel_async::pooled_connection::deadpool::Pool;
|
use diesel_async::pooled_connection::deadpool::Pool;
|
||||||
use diesel_async::RunQueryDsl;
|
|
||||||
use std::time::SystemTime;
|
use std::time::SystemTime;
|
||||||
mod config;
|
mod config;
|
||||||
use config::{Config, ConfigBuilder};
|
use config::{Config, ConfigBuilder};
|
||||||
mod api;
|
use diesel_migrations::{embed_migrations, EmbeddedMigrations, MigrationHarness};
|
||||||
|
|
||||||
|
pub const MIGRATIONS: EmbeddedMigrations = embed_migrations!();
|
||||||
|
|
||||||
type Conn = deadpool::managed::Object<AsyncDieselConnectionManager<diesel_async::AsyncPgConnection>>;
|
type Conn = deadpool::managed::Object<AsyncDieselConnectionManager<diesel_async::AsyncPgConnection>>;
|
||||||
|
|
||||||
|
mod api;
|
||||||
pub mod structs;
|
pub mod structs;
|
||||||
pub mod utils;
|
pub mod utils;
|
||||||
pub mod schema;
|
pub mod schema;
|
||||||
|
@ -55,8 +57,18 @@ async fn main() -> Result<(), Error> {
|
||||||
|
|
||||||
let cache_pool = redis::Client::open(config.cache_database.url())?;
|
let cache_pool = redis::Client::open(config.cache_database.url())?;
|
||||||
|
|
||||||
let mut conn = pool.get().await?;
|
let database_url = config.database.url();
|
||||||
|
|
||||||
|
tokio::task::spawn_blocking(move || {
|
||||||
|
use diesel::prelude::Connection;
|
||||||
|
use diesel_async::async_connection_wrapper::AsyncConnectionWrapper;
|
||||||
|
|
||||||
|
|
||||||
|
let mut conn = AsyncConnectionWrapper::<diesel_async::AsyncPgConnection>::establish(&database_url)?;
|
||||||
|
|
||||||
|
conn.run_pending_migrations(MIGRATIONS);
|
||||||
|
Ok::<_, Box<dyn std::error::Error + Send + Sync>>(())
|
||||||
|
}).await?;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
**Stored for later possible use**
|
**Stored for later possible use**
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue