#[macro_use]
extern crate diesel_migrations;
+use crate::diesel_migrations::MigrationHarness;
use actix::prelude::*;
use actix_web::{web::Data, *};
use diesel::{
r2d2::{ConnectionManager, Pool},
PgConnection,
};
+use diesel_migrations::EmbeddedMigrations;
use doku::json::{AutoComments, Formatting};
use lemmy_api::match_websocket_operation;
use lemmy_api_common::{
use lemmy_utils::{
error::LemmyError,
rate_limit::{rate_limiter::RateLimiter, RateLimit},
- settings::structs::Settings,
+ settings::{structs::Settings, SETTINGS},
};
use lemmy_websocket::{chat_server::ChatServer, LemmyContext};
-use parking_lot::Mutex;
use reqwest::Client;
use reqwest_middleware::ClientBuilder;
use reqwest_retry::{policies::ExponentialBackoff, RetryTransientMiddleware};
use reqwest_tracing::TracingMiddleware;
-use std::{env, sync::Arc, thread, time::Duration};
+use std::{
+ env,
+ sync::{Arc, Mutex},
+ thread,
+ time::Duration,
+};
use tracing_actix_web::TracingLogger;
-embed_migrations!();
+pub const MIGRATIONS: EmbeddedMigrations = embed_migrations!();
/// Max timeout for http requests
pub const REQWEST_TIMEOUT: Duration = Duration::from_secs(10);
return Ok(());
}
- let settings = Settings::init().expect("Couldn't initialize settings.");
+ let settings = SETTINGS.to_owned();
- init_logging(settings.opentelemetry_url.as_deref())?;
+ init_logging(&settings.opentelemetry_url)?;
// Set up the r2d2 connection pool
let db_url = match get_database_url_from_env() {
let manager = ConnectionManager::<PgConnection>::new(&db_url);
let pool = Pool::builder()
.max_size(settings.database.pool_size)
+ .min_idle(Some(1))
.build(manager)
.unwrap_or_else(|_| panic!("Error connecting to {}", db_url));
// Run the migrations from code
let protocol_and_hostname = settings.get_protocol_and_hostname();
blocking(&pool, move |conn| {
- embedded_migrations::run(conn)?;
+ let _ = conn
+ .run_pending_migrations(MIGRATIONS)
+ .map_err(|_| LemmyError::from_message("Couldn't run migrations"))?;
run_advanced_migrations(conn, &protocol_and_hostname)?;
Ok(()) as Result<(), LemmyError>
})
};
// Initialize the secrets
- let conn = pool.get()?;
- let secret = Secret::init(&conn).expect("Couldn't initialize secrets.");
+ let conn = &mut pool.get()?;
+ let secret = Secret::init(conn).expect("Couldn't initialize secrets.");
println!(
"Starting http server at {}:{}",
};
let client = ClientBuilder::new(reqwest_client.clone())
- .with(TracingMiddleware)
+ .with(TracingMiddleware::default())
.with(RetryTransientMiddleware::new_with_policy(retry_policy))
.build();
// Pictrs cannot use the retry middleware
let pictrs_client = ClientBuilder::new(reqwest_client.clone())
- .with(TracingMiddleware)
+ .with(TracingMiddleware::default())
.build();
check_private_instance_and_federation_enabled(&pool, &settings).await?;