Skip to content

Commit d73e7e5

Browse files
authored
Add logging for SSR render request failures (#63) (#89)
When server-side rendering fails (e.g., SSR server unavailable or returns an error), Inertia silently falls back to client-side rendering. This made debugging SSR issues difficult since errors were swallowed without any trace. This change uses Python's logging module to log exceptions when SSR requests fail, providing visibility into SSR failures while maintaining the graceful fallback behavior. Fixes #63 Co-authored-by: leeuwr <[email protected]>
1 parent 97227b2 commit d73e7e5

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

inertia/http.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import logging
12
from functools import wraps
23
from http import HTTPStatus
34
from json import dumps as json_encode
@@ -18,6 +19,7 @@
1819
except ImportError:
1920
requests = None # type: ignore[assignment]
2021

22+
logger = logging.getLogger(__name__)
2123

2224
INERTIA_REQUEST_ENCRYPT_HISTORY = "_inertia_encrypt_history"
2325
INERTIA_SESSION_CLEAR_HISTORY = "_inertia_clear_history"
@@ -172,7 +174,7 @@ def build_first_load_context_and_template(
172174
**self.template_data,
173175
}, INERTIA_SSR_TEMPLATE
174176
except Exception:
175-
pass
177+
logger.exception("SSR render request failed")
176178

177179
return {
178180
"page": data,

inertia/tests/test_ssr.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def test_it_uses_inertia_if_inertia_requests_are_made(self, mock_requests):
6565
@patch("inertia.http.requests")
6666
def test_it_fallsback_on_failure(self, mock_requests):
6767
def uh_oh(*args, **kwargs):
68-
raise ValueError() # all exceptions are caught and ignored
68+
raise ValueError() # SSR errors are logged and fall back to client-side rendering
6969

7070
mock_response = Mock()
7171
mock_response.raise_for_status.side_effect = uh_oh
@@ -75,3 +75,16 @@ def uh_oh(*args, **kwargs):
7575
self.assertContains(
7676
response, inertia_div("props", props={"name": "Brandon", "sport": "Hockey"})
7777
)
78+
79+
@patch("inertia.http.logger")
80+
@patch("inertia.http.requests")
81+
def test_it_logs_exception_on_ssr_failure(self, mock_requests, mock_logger):
82+
error = ValueError("SSR rendering failed")
83+
84+
mock_response = Mock()
85+
mock_response.raise_for_status.side_effect = error
86+
mock_requests.post.return_value = mock_response
87+
88+
self.client.get("/props/")
89+
90+
mock_logger.exception.assert_called_once_with("SSR render request failed")

0 commit comments

Comments
 (0)