You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CLAUDE.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -51,7 +51,7 @@ A superuser is required to use `/admin` and add content; create one with `python
51
51
-**Push to `master`** → auto-deploys to `makeabilitylab-test.cs.washington.edu` via webhook.
52
52
-**Push a SemVer tag (e.g. `git tag 2.3.2 && git push --tags`)** → deploys to production `makeabilitylab.cs.washington.edu`.
53
53
- Bump `ML_WEBSITE_VERSION` and `ML_WEBSITE_VERSION_DESCRIPTION` in `makeabilitylab/settings.py` when cutting a release.
54
-
-Build logs: `<host>/logs/buildlog.txt`. Application logs: `<host>/logs/debug.log`. See `docs/DEPLOYMENT.md` for SSH paths on `recycle.cs.washington.edu`.
54
+
-Application logs: read `debug.log` over SSH on `makelab1`/`makelab2`/`recycle` under `/cse/web/research/makelab/www[-test]/`. Build logs only reach you via the deploy email. **The web `/logs/` URL is gone — every path under it 404s on both hosts.** Confirm what a server is running with `/version.json` (`git_sha`, not `built_at`). See `docs/DEPLOYMENT.md`.
55
55
56
56
### Server access model (important — shapes how anything ships to prod/test)
57
57
@@ -130,7 +130,7 @@ the existing viewset/serializer pattern and keep `v1` fields additive-only
130
130
-**Prod/test `config.ini` has only a `[Django]` section — no `[Postgres]` section.** Per `settings.py`, a missing `[Postgres]` section means Django uses the fallback `DATABASES` default (`HOST='db'`) — i.e. the dockerized `db` service of the active compose file. A `[Postgres]` section, if added, would override it. So the DB is the in-stack `db` container in **every** environment (no external Postgres); on the servers that's the `db` service in `docker-compose.yml`.
-`TIME_ZONE = 'America/Los_Angeles'`. `ML_WEBSITE_VERSION` in settings is shown in the admin header and used in release tagging.
133
-
-**Logging (#1283):**`debug.log` lives at `LOG_DIR/debug.log`, where `LOG_DIR` is `$ML_LOG_DIR` or `<BASE_DIR>/media` (`/code/media` in the container). Keep it inside `MEDIA_ROOT` — the web-served `/logs/debug.log` depends on that. `ML_LOG_DIR` is unset everywhere today; it exists for non-`/code` hosts. If the dir isn't writable the file handler degrades to a `NullHandler` rather than crashing `django.setup()`, and since there's no console on the servers that state surfaces via `/version.json` (`log_to_file`) and a superuser-only callout on the admin dashboard.
133
+
-**Logging (#1283):**`debug.log` lives at `LOG_DIR/debug.log`, where `LOG_DIR` is `$ML_LOG_DIR` or `<BASE_DIR>/media` (`/code/media` in the container). Keep it inside `MEDIA_ROOT` — that's the tree bind-mounted to the shared CSE filesystem, so it's what makes the log readable over SSH at all. `ML_LOG_DIR` is unset everywhere today; it exists for non-`/code` hosts. `MEDIA_ROOT` is web-served, so never log anything sensitive. If the dir isn't writable the file handler degrades to a `NullHandler` rather than crashing `django.setup()`, and since there's no console on the servers that state surfaces via `/version.json` (`log_to_file`) and a superuser-only callout on the admin dashboard.
134
134
135
135
### Container startup side effects (`docker-entrypoint.sh`)
Match `git_sha` against the commit you pushed — **not `built_at`**, which has read
87
+
fresh while the host served stale code. The build log itself is only available in
88
+
the deploy email sent to maintainers on every push.
82
89
83
90
## Versioning
84
91
@@ -112,7 +119,7 @@ View current and past versions on the [Releases page](https://github.com/makeabi
112
119
git push --tags
113
120
```
114
121
115
-
5. Verify deployment via the [production build log](https://makeabilitylab.cs.washington.edu/logs/buildlog.txt)
122
+
5. Verify the deploy landed via [`/version.json`](https://makeabilitylab.cs.washington.edu/version.json) — check `git_sha`, not `built_at`
116
123
117
124
## Server Configuration
118
125
@@ -175,18 +182,24 @@ You only do this once per property (not per content change):
175
182
176
183
### Log Files
177
184
178
-
Not all logs live in the same place. Only the Django application log is on
179
-
the shared CSE filesystem (and therefore readable from `recycle`); the build
180
-
and web-server logs live on the Docker host (`grabthar` / `docker-test2`),
181
-
which we can't SSH into — reach those via the web `/logs/` URL or the deploy
182
-
email.
185
+
Not all logs live in the same place. Only the Django application log is on the
186
+
shared CSE filesystem, and it is the only one we can still read directly. The
187
+
build and web-server logs live on the Docker host (`grabthar` / `docker-test2`),
188
+
which we can't SSH into.
189
+
190
+
> **The web `/logs/` URL is gone.** It used to expose these files over HTTP.
191
+
> Every path under it now 404s on both prod and test (verified 2026-07-28): the
192
+
> response comes back as `Server: gunicorn` with Django's custom 404 template,
193
+
> meaning Apache has no `/logs/` alias any more and the request falls through to
194
+
> Django. It is not coming back — web access to logs is no longer needed and UW
195
+
> CSE IT has trouble maintaining it. Use SSH.
183
196
184
197
| Log | Description | Where to find it |
185
198
|-----|-------------|------------------|
186
-
|`debug.log`| Django application logs |**On the shared filesystem** — read via SSH on `recycle`(see below) or the web `/logs/` URL. A rotated `debug.log.1`sits alongside it. |
187
-
|`buildlog.txt`| Deployment build output |**Not on the shared filesystem** (so *not* under `www/` on `recycle`). It lives on the Docker host and is emailed to maintainers on every push — that email is the most reliable copy. Also exposed at the web `/logs/` URL.|
188
-
|`httpd-access.log`| HTTP request logs | On the Docker host — web `/logs/` URL. |
189
-
|`httpd-error.log`| HTTP error logs | On the Docker host — web `/logs/` URL. |
199
+
|`debug.log`| Django application logs |**On the shared filesystem** — read via SSH (see below). Rotated `debug.log.1`… `.6` sit alongside it. |
200
+
|`buildlog.txt`| Deployment build output |**Not on the shared filesystem** (so *not* under `www/`). It lives on the Docker host and is emailed to maintainers on every push — **that email is the only copy you can get.**|
201
+
|`httpd-access.log`| HTTP request logs | On the Docker host — **not reachable**; ask UW CSE IT if you need it. |
202
+
|`httpd-error.log`| HTTP error logs | On the Docker host — **not reachable**; ask UW CSE IT if you need it. |
190
203
191
204
#### Where `debug.log` is written, and what happens if that fails (#1283)
0 commit comments