Add static file server to rocket & SPA index redirect
This commit is contained in:
parent
f794f5c974
commit
0b57f140cb
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,3 +1,5 @@
|
||||||
**/target
|
**/target
|
||||||
|
|
||||||
**/*.pw
|
**/*.pw
|
||||||
|
python-venv/
|
||||||
|
tickmate-backup-20230524.db
|
||||||
|
|
17
Makefile
Normal file
17
Makefile
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
|
||||||
|
all: start-server
|
||||||
|
|
||||||
|
client/dist/index.html:
|
||||||
|
cd client; yarn && yarn build
|
||||||
|
|
||||||
|
build-client: client/dist/index.html
|
||||||
|
|
||||||
|
server/public/: client/dist/index.html
|
||||||
|
rsync -a client/dist/ server/public/
|
||||||
|
|
||||||
|
start-server: server/public/
|
||||||
|
docker compose up --build -d
|
||||||
|
|
||||||
|
clean:
|
||||||
|
docker compose down
|
||||||
|
rm -r server/public/ client/dist/
|
|
@ -8,4 +8,5 @@ ADD src/ src/
|
||||||
RUN rm dummy.rs &&\
|
RUN rm dummy.rs &&\
|
||||||
sed -i "s:dummy.rs:src/main.rs:" Cargo.toml
|
sed -i "s:dummy.rs:src/main.rs:" Cargo.toml
|
||||||
RUN cargo build --release
|
RUN cargo build --release
|
||||||
|
ADD public/ public/
|
||||||
CMD ["target/release/kalkulog-server"]
|
CMD ["target/release/kalkulog-server"]
|
||||||
|
|
|
@ -6,18 +6,29 @@ mod tracks;
|
||||||
use std::default::default;
|
use std::default::default;
|
||||||
use std::net::{IpAddr, Ipv4Addr};
|
use std::net::{IpAddr, Ipv4Addr};
|
||||||
|
|
||||||
|
use rocket::fs::{FileServer, NamedFile};
|
||||||
use rocket::Config;
|
use rocket::Config;
|
||||||
use sea_orm::DatabaseConnection;
|
use sea_orm::DatabaseConnection;
|
||||||
|
|
||||||
|
use crate::error::Error;
|
||||||
use crate::rocket::{Build, Rocket};
|
use crate::rocket::{Build, Rocket};
|
||||||
|
|
||||||
pub(crate) use error::ErrorResponder;
|
pub(crate) use error::ErrorResponder;
|
||||||
|
|
||||||
|
use self::error::ApiResult;
|
||||||
|
|
||||||
#[get("/status")]
|
#[get("/status")]
|
||||||
fn status() -> &'static str {
|
fn status() -> &'static str {
|
||||||
"Ok"
|
"Ok"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[catch(404)]
|
||||||
|
async fn spa_index_redirect() -> ApiResult<NamedFile> {
|
||||||
|
Ok(NamedFile::open("/src/public/index.html")
|
||||||
|
.await
|
||||||
|
.map_err(Error::from)?)
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn start_server(db: DatabaseConnection) -> Rocket<Build> {
|
pub(crate) fn start_server(db: DatabaseConnection) -> Rocket<Build> {
|
||||||
use groups::*;
|
use groups::*;
|
||||||
use ticks::*;
|
use ticks::*;
|
||||||
|
@ -27,6 +38,7 @@ pub(crate) fn start_server(db: DatabaseConnection) -> Rocket<Build> {
|
||||||
address: IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)),
|
address: IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)),
|
||||||
..default()
|
..default()
|
||||||
})
|
})
|
||||||
|
.register("/", catchers![spa_index_redirect])
|
||||||
.manage(db)
|
.manage(db)
|
||||||
.mount("/api/v1", routes![status])
|
.mount("/api/v1", routes![status])
|
||||||
.mount(
|
.mount(
|
||||||
|
@ -41,4 +53,5 @@ pub(crate) fn start_server(db: DatabaseConnection) -> Rocket<Build> {
|
||||||
"/api/v1/groups",
|
"/api/v1/groups",
|
||||||
routes![all_groups, group, insert_group, update_group, delete_group],
|
routes![all_groups, group, insert_group, update_group, delete_group],
|
||||||
)
|
)
|
||||||
|
.mount("/", FileServer::from("/src/public"))
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,8 @@ pub enum Error {
|
||||||
Builder(#[from] UninitializedFieldError),
|
Builder(#[from] UninitializedFieldError),
|
||||||
#[error(transparent)]
|
#[error(transparent)]
|
||||||
SeaOrm(#[from] sea_orm::DbErr),
|
SeaOrm(#[from] sea_orm::DbErr),
|
||||||
|
#[error(transparent)]
|
||||||
|
Io(#[from] std::io::Error),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type Result<T> = std::result::Result<T, Error>;
|
pub type Result<T> = std::result::Result<T, Error>;
|
||||||
|
|
Loading…
Reference in a new issue