dmorlock
(Daniel Morlock)
4. Mai 2022 um 15:27
1
Wir stoßen auf einen Fehler, bei dem die theme-javascripts zu fehlen scheinen:
$ curl https://mydomain.com | grep "theme-javascript"
<script src="/theme-javascripts/ff7f780a40bfd1e31a2cdc99c7dbc616f619d7d9.js?__ws=mydomain.com"></script>
<script src="/theme-javascripts/1bb8395b8d8d9daecdbef830d8c9418b93a7b5f9.js?__ws=mydomain.com"></script>
Aber wenn wir versuchen, auf diese Dateien zuzugreifen (im Browser mit einem angemeldeten Benutzer), erhalten wir einen 404-Fehler:
Hoppla! Diese Seite existiert nicht oder ist privat.
Wenn wir den javascript-cache überprüfen, existieren die Dateien:
$ find /var/www/discourse/tmp/javascript-cache -iname 'ff7f780a40bfd1e31a2cdc99c7dbc616f619d7d9*'
/var/www/discourse/tmp/javascript-cache/ff7f780a40bfd1e31a2cdc99c7dbc616f619d7d9.js
Die aktuelle Problemumgehung besteht darin, das benutzerdefinierte Theme zu bearbeiten, indem das Theme geändert und gespeichert wird.
Nach 1-2 Tagen tritt das Problem erneut auf.
Wir würden uns über jede Hilfe bei weiteren Untersuchungen freuen.
Danke,
Daniel.
david
(David Taylor)
4. Mai 2022 um 17:10
2
Welche Discourse-Version verwendest du? Wir haben ein ähnlich klingendes Problem im Februar behoben:
committed 01:23PM - 14 Feb 22 UTC
There is a couple of layers of caching for theme JavaScript in Discourse:
The… first layer is the `javascript_caches` table in the database. When a theme
with JavaScript files is installed, Discourse stores each one of the JavaScript
files in the `theme_fields` table, and then concatenates the files, compiles
them, computes a SHA1 digest of the compiled JavaScript and store the results
along with the SHA1 digest in the `javascript_caches` table.
Now when a request comes in, we need to render `<script>` tags for the
activated theme(s) of the site. To do this, we retrieve the `javascript_caches`
records of the activated themes and generate a `<script>` tag for each record.
The `src` attribute of these tags is a path to the `/theme-javascripts/:digest`
route which simply responds with the compiled JavaScript that has the requested
digest.
The second layer is a distributed cache whose purpose is to make rendering
`<script>` a lot more efficient. Without this cache, we'd have to query the
`javascript_caches` table to retrieve the SHA1 digests for every single
request. So we use this cache to store the `<script>` tags themselves so that
we only have to retrieve the `javascript_caches` records of the activated
themes for the first request and future requests simply get the cached
`<script>` tags.
What this commit does it ensures that the SHA1 digest in the
`javascript_caches` table stay the same across compilations by adding an order
by id clause to the query that loads the `theme_fields` records. Currently, we
specify no order when retrieving the `theme_fields` records so the order in
which they're retrieved can change across compilations and therefore cause the
SHA1 to change even though the individual records have not changed at all.
An inconsistent SHA1 digest across compilations can cause the database cache
and the distributed cache to have different digests and that causes the
JavaScript to fail to load (and if the theme heavily customizes the site, it
gives the impression that the site is broken) until the cache is cleared.
This can happen in busy sites when 2 concurrent requests recompile the
JavaScript files of a theme at the same time (this can happen when deploying a
new Discourse version) and request A updates the database cache after request B
did, and request B updates the distributed cache after request A did.
Internal ticket: t60783.
Co-authored-by: David Taylor <david@taylorhq.com>
3 „Gefällt mir“
dmorlock
(Daniel Morlock)
5. Mai 2022 um 19:32
3
Wir verwenden V2.8.0. Welche Version enthält die erwähnte Korrektur?
david
(David Taylor)
6. Mai 2022 um 09:51
4
Dieser Fix ist nur in 2.9.0 (Beta) enthalten. Ich werde sehen, ob wir ihn in die stabile Version zurückportieren können, da es sich um einen relativ einfachen Fix handelt: (PR hier )
Bearbeiten: Das wurde in den stabilen Zweig @dmorlock übernommen. Wenn Sie also ein Upgrade durchführen (über die Konsole oder über /admin/upgrade), sollte das Problem behoben sein.
3 „Gefällt mir“
dmorlock
(Daniel Morlock)
6. Mai 2022 um 21:38
5
Wir haben gerade auf den stabilen Zweig aktualisiert und testen derzeit, ob dies unser Problem behoben hat.
1 „Gefällt mir“
david
(David Taylor)
Geschlossen,
5. Juni 2022 um 21:38
6
Dieses Thema wurde 30 Tage nach der letzten Antwort automatisch geschlossen. Neue Antworten sind nicht mehr zulässig.