diff --git a/tuts/hot_reload_axum.md b/tuts/hot_reload_axum.md new file mode 100644 index 0000000..a1020ed --- /dev/null +++ b/tuts/hot_reload_axum.md @@ -0,0 +1,52 @@ +# Hot Reload Axum + +I got tired of restarting my `shuttle run` server pretty fast. I needed a solution. + +Dug around a bit and found [tower_livereload](https://github.com/leotaku/tower-livereload). It was actually mentioned in the [shuttle](https://www.shuttle.rs/) docs [here](https://docs.shuttle.rs/getting-started/local-run#live-reload-frontend-with-tower-livereload). + +That isn't enought tho. You actually need one more piece. A more important piece i might add. +[cargo watch](https://crates.io/crates/cargo-watch) + +This crate will auto reload your server on save, combined with `tower livereload` will also refresh the page, so you dont have to do anythign but wait, really. + +## Show me the important stuff + +### Install cargo watch + +```bash +cargo install cargo-watch +``` + +### Add Tower livereload + +```bash +cargo add tower-livereload +``` + +### Inject the necessary code in your project + +```rust +#[tokio::main] +async fn main() -> Result<(), Box> { + let app = Router::new() + .route() // some route + .layer(tower_livereload::LiveReloadLayer::new()); // <--- add here + + // --- ignore all of this ---v + let listener = tokio::net::TcpListener::bind("0.0.0.0:8000").await?; + axum::serve(listener, app).await?; + + Ok(()) +} +``` + +### Run your shuttle server in watch mode + +```bash +# This will e(x)ecute `cargo shuttle run` when you save a file. +cargo watch -x 'shuttle run' +# This will also (q)uietly (c)lear the console between runs. +cargo watch -qcx 'shuttle run' + +# There are many other helpful options, see `cargo watch --help` +```