]> Untitled Git - lemmy.git/blob - server/src/main.rs
Trying to add r2d2 connection pooling to websockets.
[lemmy.git] / server / src / main.rs
1 extern crate lemmy_server;
2 #[macro_use]
3 extern crate diesel_migrations;
4
5 use actix_web::*;
6 use diesel::r2d2::{ConnectionManager, Pool};
7 use diesel::PgConnection;
8 use lemmy_server::routes::{federation, feeds, index, nodeinfo, webfinger, websocket};
9 use lemmy_server::settings::Settings;
10 use std::io;
11
12 embed_migrations!();
13
14 #[actix_rt::main]
15 async fn main() -> io::Result<()> {
16   env_logger::init();
17   let settings = Settings::get();
18
19   // Set up the r2d2 connection pool
20   let manager = ConnectionManager::<PgConnection>::new(&settings.get_database_url());
21   let pool = Pool::builder()
22     .max_size(settings.database.pool_size)
23     .build(manager)
24     .unwrap_or_else(|_| panic!("Error connecting to {}", settings.get_database_url()));
25
26   // Run the migrations from code
27   let conn = pool.get().unwrap();
28   embedded_migrations::run(&conn).unwrap();
29
30   println!(
31     "Starting http server at {}:{}",
32     settings.bind, settings.port
33   );
34
35   // Create Http server with websocket support
36   HttpServer::new(move || {
37     App::new()
38       .wrap(middleware::Logger::default())
39       .data(pool.clone())
40       // The routes
41       .configure(federation::config)
42       .configure(feeds::config)
43       .configure(index::config)
44       .configure(nodeinfo::config)
45       .configure(webfinger::config)
46       .configure(websocket::config)
47       // .configure(websocket.config(pool))
48       // .configure(websocket.
49       // static files
50       .service(actix_files::Files::new(
51         "/static",
52         settings.front_end_dir.to_owned(),
53       ))
54       .service(actix_files::Files::new(
55         "/docs",
56         settings.front_end_dir.to_owned() + "/documentation",
57       ))
58   })
59   .bind((settings.bind, settings.port))?
60   .run()
61   .await
62 }