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:
parent
4fb343c87e
commit
125bb7dac1
3 changed files with 4 additions and 22 deletions
|
@ -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/;
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
|
|
@ -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 = ''
|
||||
|
|
|
@ -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
|
Loading…
Reference in a new issue