discourse: Don't patch the public path

Instead of patching the path to /public in Discourse's sources, make
the nginx configuration refer to the symlink in the discourse
package which points to the real path.

When there is a mismatch between the path nginx serves and the path
Discourse thinks it serves, we can run into issues like files not
being served - at least when sendfile requests from the ruby app are
processed by nginx. The issue I ran into most recently is that backup
downloads don't work.

Since Discourse refers to the public directory relative to the Rails
root in many places, it's much easier to just sync this path to the
nginx configuration than trying to patch all occurrences in the
sources. This should hopefully mean less potential for breakage in
future Discourse releases, too.
This commit is contained in:
talyz 2021-12-06 14:21:39 +01:00
parent 4fb343c87e
commit 125bb7dac1
No known key found for this signature in database
GPG Key ID: 2DED2151F4671A2B
3 changed files with 4 additions and 22 deletions

View File

@ -841,7 +841,7 @@ in
inherit (cfg) sslCertificate sslCertificateKey enableACME;
forceSSL = lib.mkDefault tlsEnabled;
root = "/run/discourse/public";
root = "${cfg.package}/share/discourse/public";
locations =
let
@ -893,7 +893,7 @@ in
"~ ^/uploads/" = proxy {
extraConfig = cache_1y + ''
proxy_set_header X-Sendfile-Type X-Accel-Redirect;
proxy_set_header X-Accel-Mapping /run/discourse/public/=/downloads/;
proxy_set_header X-Accel-Mapping ${cfg.package}/share/discourse/public/=/downloads/;
# custom CSS
location ~ /stylesheet-cache/ {
@ -915,7 +915,7 @@ in
"~ ^/admin/backups/" = proxy {
extraConfig = ''
proxy_set_header X-Sendfile-Type X-Accel-Redirect;
proxy_set_header X-Accel-Mapping /run/discourse/public/=/downloads/;
proxy_set_header X-Accel-Mapping ${cfg.package}/share/discourse/public/=/downloads/;
'';
};
"~ ^/(svg-sprite/|letter_avatar/|letter_avatar_proxy/|user_avatar|highlight-js|stylesheets|theme-javascripts|favicon/proxied|service-worker)" = proxy {
@ -942,7 +942,7 @@ in
};
"/downloads/".extraConfig = ''
internal;
alias /run/discourse/public/;
alias ${cfg.package}/share/discourse/public/;
'';
};
};

View File

@ -264,11 +264,6 @@ let
# Make sure the notification email setting applies
./notification_email.patch
# Change the path to the public directory reported by Discourse
# to its real path instead of the symlink in the store, since
# the store path won't be matched by any nginx rules
./public_dir_path.patch
];
postPatch = ''

View File

@ -1,13 +0,0 @@
diff --git a/lib/file_store/local_store.rb b/lib/file_store/local_store.rb
index 25649532c0..614e062dc1 100644
--- a/lib/file_store/local_store.rb
+++ b/lib/file_store/local_store.rb
@@ -88,7 +88,7 @@ module FileStore
end
def public_dir
- File.join(Rails.root, "public")
+ "/run/discourse/public"
end
def tombstone_dir