forked from 2sys/shoutdotdev
embed db migrations into binary
This commit is contained in:
parent
e58e5002a0
commit
b8411ddf4e
4 changed files with 51 additions and 0 deletions
33
Cargo.lock
generated
33
Cargo.lock
generated
|
@ -871,6 +871,17 @@ dependencies = [
|
|||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "diesel_migrations"
|
||||
version = "2.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8a73ce704bad4231f001bff3314d91dce4aba0770cee8b233991859abc15c1f6"
|
||||
dependencies = [
|
||||
"diesel",
|
||||
"migrations_internals",
|
||||
"migrations_macros",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "diesel_table_macro_syntax"
|
||||
version = "0.2.0"
|
||||
|
@ -1783,6 +1794,27 @@ version = "2.7.4"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
|
||||
|
||||
[[package]]
|
||||
name = "migrations_internals"
|
||||
version = "2.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fd01039851e82f8799046eabbb354056283fb265c8ec0996af940f4e85a380ff"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"toml",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "migrations_macros"
|
||||
version = "2.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ffb161cc72176cb37aa47f1fc520d3ef02263d67d661f44f05d05a079e1237fd"
|
||||
dependencies = [
|
||||
"migrations_internals",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mime"
|
||||
version = "0.3.17"
|
||||
|
@ -2602,6 +2634,7 @@ dependencies = [
|
|||
"console_error_panic_hook",
|
||||
"deadpool-diesel",
|
||||
"diesel",
|
||||
"diesel_migrations",
|
||||
"dotenvy",
|
||||
"futures",
|
||||
"lettre",
|
||||
|
|
|
@ -33,3 +33,4 @@ tower = "0.5.2"
|
|||
regex = "1.11.1"
|
||||
lettre = { version = "0.11.12", features = ["tokio1", "serde", "tracing", "tokio1-native-tls"] }
|
||||
clap = { version = "4.5.31", features = ["derive"] }
|
||||
diesel_migrations = { version = "2.2.0", features = ["postgres"] }
|
||||
|
|
12
src/main.rs
12
src/main.rs
|
@ -25,6 +25,7 @@ use std::process::exit;
|
|||
|
||||
use chrono::{TimeDelta, Utc};
|
||||
use clap::{Parser, Subcommand};
|
||||
use diesel_migrations::{embed_migrations, EmbeddedMigrations, MigrationHarness};
|
||||
use email::SmtpOptions;
|
||||
use tokio::time::sleep;
|
||||
use tracing_subscriber::EnvFilter;
|
||||
|
@ -71,6 +72,7 @@ async fn main() {
|
|||
let db_pool = deadpool_diesel::postgres::Pool::builder(manager)
|
||||
.build()
|
||||
.unwrap();
|
||||
|
||||
let session_store = PgStore::new(db_pool.clone());
|
||||
let reqwest_client = reqwest::ClientBuilder::new()
|
||||
.https_only(true)
|
||||
|
@ -94,6 +96,16 @@ async fn main() {
|
|||
exit(1);
|
||||
};
|
||||
|
||||
if settings.run_database_migrations == Some(1) {
|
||||
const MIGRATIONS: EmbeddedMigrations = embed_migrations!("migrations/");
|
||||
// Run migrations on server startup
|
||||
let conn = db_pool.get().await.unwrap();
|
||||
conn.interact(|conn| conn.run_pending_migrations(MIGRATIONS).map(|_| ()))
|
||||
.await
|
||||
.unwrap()
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
let app_state = AppState {
|
||||
db_pool: db_pool.clone(),
|
||||
mailer,
|
||||
|
|
|
@ -13,6 +13,11 @@ pub struct Settings {
|
|||
|
||||
pub database_url: String,
|
||||
|
||||
/**
|
||||
* When set to 1, embedded Diesel migrations will be run on startup.
|
||||
*/
|
||||
pub run_database_migrations: Option<u8>,
|
||||
|
||||
#[serde(default = "default_host")]
|
||||
pub host: String,
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue