test had no user/env/<host>/ tree because deploy/env/test/ never existed, so `make remote-apply-env-test` hit its missing-source guard and was silently skipped — test ran with twig cache off and without the gzip/Content-Encoding fix, hiding the exact class of gotcha that only surfaced in prod. Make deploy/env/test/system.yaml a symlink to deploy/env/prod/system.yaml so both deployed hosts share one override and can never drift; genericize the prod file header to say it now serves test + prod. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Np4cMQLF77i664CAQXySzU
44 lines
2.0 KiB
YAML
44 lines
2.0 KiB
YAML
# Deployed-environment Grav config overrides (test AND prod).
|
|
#
|
|
# Both server environments share this one file so test stays a faithful dress
|
|
# rehearsal of prod: deploy/env/test/system.yaml is a symlink to this file.
|
|
# Edit here and both environments move together — never let them drift.
|
|
#
|
|
# Deep-merged OVER the committed user/config/system.yaml via Grav's
|
|
# per-environment config mechanism: on the server this file is deployed to
|
|
# <webroot>/user/env/<hostname>/config/system.yaml
|
|
# and Grav's `environment://config` stream (keyed on the request hostname)
|
|
# layers it on top of `user://config`.
|
|
#
|
|
# These values are deliberately NOT in the committed system.yaml because they
|
|
# would break local development (see CLAUDE.md §1 — dev keeps twig.cache:false
|
|
# so theme edits take effect immediately). They apply only on the deployed
|
|
# hosts, never on a local dev checkout.
|
|
#
|
|
# Deploy with: make remote-apply-env-test / make remote-apply-env-prod
|
|
# The user/env/ tree is outside the content repo's tracked folders, so it is
|
|
# NOT restored by content-push / git-sync / remote-fetch-content — re-run the
|
|
# target above after any fresh install.
|
|
twig:
|
|
cache: true
|
|
debug: false
|
|
auto_reload: false
|
|
|
|
# Compression / connection handling.
|
|
#
|
|
# This host is not FastCGI (no fastcgi_finish_request()), so Grav's shutdown
|
|
# "early connection close" falls back to emitting `Content-Encoding: identity`
|
|
# to ask the webserver not to compress. But Apache's mod_deflate compresses
|
|
# anyway and adds `Content-Encoding: gzip`, giving TWO conflicting headers —
|
|
# the browser can't decode the body and renders raw gzip bytes (a garbage
|
|
# page). Note: allow_webserver_gzip:true takes the SAME identity branch, so it
|
|
# does not help. The real fix is to disable the early-close path, so Grav never
|
|
# emits the bogus header and mod_deflate compresses cleanly (single header).
|
|
debugger:
|
|
shutdown:
|
|
close_connection: false
|
|
# Let the webserver own gzip; Grav does not compress or double-label.
|
|
cache:
|
|
gzip: false
|
|
allow_webserver_gzip: false
|