You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
1.9 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. use actix_demo::{AppConfig, AppData, EnvConfig};
  2. use diesel::{r2d2::ConnectionManager, SqliteConnection};
  3. use env_logger::Env;
  4. use io::ErrorKind;
  5. use std::io;
  6. #[actix_web::main]
  7. async fn main() -> io::Result<()> {
  8. let _ = dotenv::dotenv().map_err(|err| {
  9. io::Error::new(
  10. ErrorKind::Other,
  11. format!("Failed to set up env: {:?}", err),
  12. )
  13. })?;
  14. let _ = env_logger::try_init_from_env(
  15. Env::default().filter("ACTIX_DEMO_RUST_LOG"),
  16. )
  17. .map_err(|err| {
  18. io::Error::new(
  19. ErrorKind::Other,
  20. format!("Failed to set up env logger: {:?}", err),
  21. )
  22. })?;
  23. let env_config = envy::prefixed("ACTIX_DEMO_")
  24. .from_env::<EnvConfig>()
  25. .map_err(|err| {
  26. io::Error::new(
  27. ErrorKind::Other,
  28. format!("Failed to parse config: {:?}", err),
  29. )
  30. })?;
  31. let connspec = &env_config.database_url;
  32. let manager = ConnectionManager::<SqliteConnection>::new(connspec);
  33. let pool = r2d2::Pool::builder().build(manager).map_err(|err| {
  34. io::Error::new(
  35. ErrorKind::Other,
  36. format!("Failed to create pool: {:?}", err),
  37. )
  38. })?;
  39. let _ = {
  40. let conn = &pool.get().map_err(|err| {
  41. io::Error::new(
  42. ErrorKind::Other,
  43. format!("Failed to get connection: {:?}", err),
  44. )
  45. })?;
  46. let _ =
  47. diesel_migrations::run_pending_migrations(conn).map_err(|err| {
  48. io::Error::new(
  49. ErrorKind::Other,
  50. format!("Error running migrations: {:?}", err),
  51. )
  52. })?;
  53. };
  54. let app_data = AppData {
  55. config: AppConfig {
  56. hash_cost: env_config.hash_cost,
  57. },
  58. pool: pool.clone(),
  59. };
  60. actix_demo::run(format!("{}:7800", env_config.http_host), app_data).await
  61. }