diff --git a/Cargo.toml b/Cargo.toml index bbcceca..2de1914 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,12 +9,12 @@ license = "AGPL-3.0" [dependencies] rocket = { version = "0.5.0-rc.1", features = ["json"] } diesel = { version = "1.4.8", features = ["postgres", "chrono"] } +diesel_migrations = "1.4.0" redis = { version="0.21.5", features = ["aio", "tokio-comp"] } chrono = { version="0.*", features =["serde"] } rand = "0.*" dotenv = "0.*" sha2 = "0.*" -diesel_logger = "0.1.1" log = "0.4.16" env_logger = "0.9.0" diff --git a/README.md b/README.md index a0fc156..d79c222 100644 --- a/README.md +++ b/README.md @@ -5,20 +5,22 @@ ### prepare database -```sql -CREATE USER hole CREATEDB; -ALTER USER hole WITH PASSWORD "hole_pass"; ``` - -``` -$ diesel setup +sudo -u postgres psql ``` -```sql -\c hole_v2 -CREATE EXTENSION pg_trgm; +```postgresql +postgres=# CREATE USER hole WITH PASSWORD 'hole_pass'; +CREATE ROLE +postgres=# CREATE DATABASE hole_v2 OWNER hole; +CREATE DATABASE +postgres=# \c hole_v2 +You are now connected to database "hole_v2" as user "postgres". +hole_v2=# CREATE EXTENSION pg_trgm; +CREATE EXTENSION +hole_v2=# \q ``` ``` -$ diesel run +./hole-thu --init-database ``` diff --git a/src/main.rs b/src/main.rs index c85043d..8bd9e9f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,6 +4,9 @@ extern crate rocket; #[macro_use] extern crate diesel; +#[macro_use] +extern crate diesel_migrations; + #[macro_use] extern crate log; @@ -17,13 +20,21 @@ mod rds_models; mod cache; mod schema; -use db_conn::Db; +use db_conn::{Conn, Db}; +use diesel::Connection; use random_hasher::RandomHasher; use rds_conn::init_rds_client; +use std::env; + +embed_migrations!("migrations/postgres"); #[rocket::main] async fn main() -> Result<(), rocket::Error> { load_env(); + if env::args().any(|arg| arg.eq("--init-database")) { + init_database(); + return Ok(()); + } env_logger::init(); rocket::build() .mount( @@ -58,3 +69,9 @@ fn load_env() { e => e.map(|_| ()).unwrap(), } } + +fn init_database() { + let database_url = env::var("DATABASE_URL").unwrap(); + let conn = Conn::establish(&database_url).unwrap(); + embedded_migrations::run(&conn).unwrap(); +} diff --git a/src/schema.rs b/src/schema.rs index 83a6e58..db6da45 100644 --- a/src/schema.rs +++ b/src/schema.rs @@ -42,4 +42,8 @@ table! { joinable!(comments -> posts (post_id)); -allow_tables_to_appear_in_same_query!(comments, posts, users,); +allow_tables_to_appear_in_same_query!( + comments, + posts, + users, +);