From 601b848c4f54d682be26bb6f5dc6f07d21c439fa Mon Sep 17 00:00:00 2001 From: narumincho <16481886+narumincho@users.noreply.github.com> Date: Mon, 4 May 2026 19:23:30 +0900 Subject: [PATCH 1/4] =?UTF-8?q?rename=20Meta::new=20=E2=86=92=20Meta::node?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- definy-ui/src/lib.rs | 2 +- narumincho-vdom/src/meta.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/definy-ui/src/lib.rs b/definy-ui/src/lib.rs index a1911c9c..2a1bef58 100644 --- a/definy-ui/src/lib.rs +++ b/definy-ui/src/lib.rs @@ -102,7 +102,7 @@ pub fn render( Title::new() .children([text(page_title::document_title_text(state))]) .into_node(), - Meta::new("viewport", "width=device-width,initial-scale=1.0"), + Meta::node("viewport", "width=device-width,initial-scale=1.0"), Link::new() .rel("icon") .href(include_str!("../../web-distribution/icon.png.sha256")) diff --git a/narumincho-vdom/src/meta.rs b/narumincho-vdom/src/meta.rs index 4d4fa517..54cdfc1e 100644 --- a/narumincho-vdom/src/meta.rs +++ b/narumincho-vdom/src/meta.rs @@ -6,7 +6,7 @@ pub struct Meta { impl Meta { /// https://developer.mozilla.org/ja/docs/Web/HTML/Reference/Elements/meta - pub fn new(name: &str, content: &str) -> node::Node { + pub fn node(name: &str, content: &str) -> node::Node { node::Node::Element(node::Element { element_name: "meta".to_string(), styles: crate::style::Style::new(), From 243eb4e83fc827350a1afcaa275f38c578050466 Mon Sep 17 00:00:00 2001 From: narumincho <16481886+narumincho@users.noreply.github.com> Date: Mon, 11 May 2026 08:57:44 +0900 Subject: [PATCH 2/4] =?UTF-8?q?=E8=B5=B7=E5=8B=95=E7=9B=B4=E5=BE=8C?= =?UTF-8?q?=E3=81=AB=20=E3=83=87=E3=83=BC=E3=82=BF=E3=83=99=E3=83=BC?= =?UTF-8?q?=E3=82=B9=E3=81=AB=E6=8E=A5=E7=B6=9A=E3=81=A7=E3=81=8D=E3=81=BE?= =?UTF-8?q?=E3=81=9B=E3=82=93=20=E3=81=A8=E3=81=84=E3=81=86=E3=82=A8?= =?UTF-8?q?=E3=83=A9=E3=83=BC=E3=81=8C=E8=A1=A8=E7=A4=BA=E3=81=95=E3=82=8C?= =?UTF-8?q?=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- definy-server/src/main.rs | 69 ++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 40 deletions(-) diff --git a/definy-server/src/main.rs b/definy-server/src/main.rs index 1a2edbda..339a22be 100644 --- a/definy-server/src/main.rs +++ b/definy-server/src/main.rs @@ -3,7 +3,6 @@ mod event; use std::net::SocketAddr; use std::sync::Arc; -use std::time::Duration; use http_body_util::Full; use hyper::body::Bytes; @@ -27,42 +26,6 @@ async fn main() -> Result<(), anyhow::Error> { pool: Arc::new(RwLock::new(None)), }; - let state_for_retry = state.clone(); - tokio::spawn(async move { - loop { - let current_pool = state_for_retry.pool.read().await.clone(); - - match current_pool { - Some(pool) => { - if let Err(error) = sqlx::query("select 1").execute(&pool).await { - eprintln!( - "Database health check failed. Switching to reconnect mode... {:?}", - error - ); - let mut guard = state_for_retry.pool.write().await; - *guard = None; - } - } - None => match db::init_db().await { - Ok(pool) => { - { - let mut guard = state_for_retry.pool.write().await; - *guard = Some(pool); - } - println!("Database is available. API requests will use the database."); - } - Err(error) => { - eprintln!( - "Failed to connect to database. Retrying in 5 seconds... {:?}", - error - ); - } - }, - } - tokio::time::sleep(Duration::from_secs(5)).await; - } - }); - let addr = SocketAddr::from(( std::net::IpAddr::V6(match std::env::var("FLY_APP_NAME") { Ok(_) => std::net::Ipv6Addr::UNSPECIFIED, @@ -141,7 +104,7 @@ async fn handler( let language_resolution = definy_ui::language::resolve_language(uri.query(), accept_language); let language_fallback_notice = language_resolution.fallback_notice(); - let pool = state.pool.read().await.clone(); + let pool = ensure_pool(&state).await; return match pool { Some(pool) => { handle_html( @@ -170,7 +133,7 @@ async fn handler( .header("Cache-Control", "public, max-age=31536000, immutable") .body(Full::new(Bytes::from_static(ICON_CONTENT))), "events" => { - let pool = state.pool.read().await.clone(); + let pool = ensure_pool(&state).await; match pool { Some(pool) => event::handle_events(request, address, &pool).await, None => db_unavailable_response(false), @@ -179,7 +142,7 @@ async fn handler( path => { if let Some(event_binary_hash_hex) = path.strip_prefix("events/") { let event_binary_hash_hex = event_binary_hash_hex.to_string(); - let pool = state.pool.read().await.clone(); + let pool = ensure_pool(&state).await; match pool { Some(pool) => { event::handle_event_get(request, pool, &event_binary_hash_hex).await @@ -196,6 +159,32 @@ async fn handler( } } +async fn ensure_pool(state: &AppState) -> Option { + if let Some(pool) = state.pool.read().await.clone() { + return Some(pool); + } + + let mut guard = state.pool.write().await; + if let Some(pool) = guard.clone() { + return Some(pool); + } + + match db::init_db().await { + Ok(pool) => { + *guard = Some(pool.clone()); + println!("Database is available. API requests will use the database."); + Some(pool) + } + Err(error) => { + eprintln!( + "Failed to connect to database while handling request: {:?}", + error + ); + None + } + } +} + fn db_unavailable_response(wants_html: bool) -> Result>, hyper::http::Error> { if wants_html { return Response::builder() From 88fdc8f05729cde427dd98c030530cce61be4279 Mon Sep 17 00:00:00 2001 From: narumincho <16481886+narumincho@users.noreply.github.com> Date: Mon, 11 May 2026 21:18:27 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=E6=8C=87=E6=91=98=E7=82=B9=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- definy-server/src/main.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/definy-server/src/main.rs b/definy-server/src/main.rs index 339a22be..71c9f1fc 100644 --- a/definy-server/src/main.rs +++ b/definy-server/src/main.rs @@ -164,14 +164,14 @@ async fn ensure_pool(state: &AppState) -> Option { return Some(pool); } - let mut guard = state.pool.write().await; - if let Some(pool) = guard.clone() { - return Some(pool); - } - match db::init_db().await { Ok(pool) => { + let mut guard = state.pool.write().await; + if let Some(existing_pool) = guard.clone() { + return Some(existing_pool); + } *guard = Some(pool.clone()); + drop(guard); println!("Database is available. API requests will use the database."); Some(pool) } From 3b61a3ec1090af56df4daafe8bdda66dd3c83947 Mon Sep 17 00:00:00 2001 From: narumincho <16481886+narumincho@users.noreply.github.com> Date: Mon, 11 May 2026 21:27:10 +0900 Subject: [PATCH 4/4] =?UTF-8?q?wasm-bindgen-cli=20=E3=81=AE=E3=83=90?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=83=A7=E3=83=B3=E3=82=92=E6=98=8E=E7=A2=BA?= =?UTF-8?q?=E3=81=AB=E6=8C=87=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yaml | 2 +- .github/workflows/pull_request.yaml | 2 +- README.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index b50c5915..6b27d9c4 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -9,7 +9,7 @@ jobs: steps: - uses: actions/checkout@v6 - uses: Swatinem/rust-cache@v2 - - run: cargo install wasm-bindgen-cli + - run: cargo install wasm-bindgen-cli --version 0.2.120 - run: rustup target add wasm32-unknown-unknown - run: cargo run -p definy-build - run: cargo build -p definy-server --release diff --git a/.github/workflows/pull_request.yaml b/.github/workflows/pull_request.yaml index b4a56aba..b9c3b206 100644 --- a/.github/workflows/pull_request.yaml +++ b/.github/workflows/pull_request.yaml @@ -11,7 +11,7 @@ jobs: - run: cargo fmt --check - uses: browser-actions/setup-chrome@v2 - uses: nanasess/setup-chromedriver@v2 - - run: cargo install wasm-bindgen-cli + - run: cargo install wasm-bindgen-cli --version 0.2.120 - run: rustup target add wasm32-unknown-unknown - run: cargo run -p definy-build - run: cargo test diff --git a/README.md b/README.md index d421b46e..82016f7a 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ https://github.com/narumincho/definy/tree/prev2023 - [wasm-bindgen-cli](https://wasm-bindgen.github.io/wasm-bindgen/) ```sh -cargo install wasm-bindgen-cli +cargo install wasm-bindgen-cli --version 0.2.120 ``` - [PostgreSQL 17](https://www.postgresql.org/download/)