From 3830f41e5fc2cfc16fa3b856de8ad70086a8cf16 Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 25 Mar 2014 10:37:31 +1100 Subject: [PATCH] BUGFIX: attachments bust under multisite --- app/controllers/uploads_controller.rb | 18 +++++++++++------- config/nginx.sample.conf | 13 ++++++++----- .../rails_multisite/connection_management.rb | 11 +++++++---- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/app/controllers/uploads_controller.rb b/app/controllers/uploads_controller.rb index d2442d21101..e501d4a0e90 100644 --- a/app/controllers/uploads_controller.rb +++ b/app/controllers/uploads_controller.rb @@ -30,17 +30,21 @@ class UploadsController < ApplicationController end def show - return render nothing: true, status: 404 unless Discourse.store.internal? + RailsMultisite::ConnectionManagement.with_connection(params[:site]) do |db| - id = params[:id].to_i - url = request.fullpath + return render nothing: true, status: 404 unless Discourse.store.internal? - # the "url" parameter is here to prevent people from scanning the uploads using the id - upload = Upload.where(id: id, url: url).first + id = params[:id].to_i + url = request.fullpath - return render nothing: true, status: 404 unless upload + # the "url" parameter is here to prevent people from scanning the uploads using the id + upload = Upload.where(id: id, url: url).first - send_file(Discourse.store.path_for(upload), filename: upload.original_filename) + return render nothing: true, status: 404 unless upload + + send_file(Discourse.store.path_for(upload), filename: upload.original_filename) + + end end end diff --git a/config/nginx.sample.conf b/config/nginx.sample.conf index ec3f0434525..19e645f330d 100644 --- a/config/nginx.sample.conf +++ b/config/nginx.sample.conf @@ -42,6 +42,14 @@ server { # path to discourse's public directory set $public /var/www/discourse/public; + # prep all possible needed proxy headers + # this is critical form multisite + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $thescheme; + + location / { root $public; @@ -98,11 +106,6 @@ server { } location @discourse { - proxy_set_header Host $http_host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $thescheme; - proxy_pass http://discourse; } diff --git a/vendor/gems/rails_multisite/lib/rails_multisite/connection_management.rb b/vendor/gems/rails_multisite/lib/rails_multisite/connection_management.rb index cb78c6cc0cb..f22910bc79b 100644 --- a/vendor/gems/rails_multisite/lib/rails_multisite/connection_management.rb +++ b/vendor/gems/rails_multisite/lib/rails_multisite/connection_management.rb @@ -35,12 +35,15 @@ module RailsMultisite old = current_db connected = ActiveRecord::Base.connection_pool.connected? - establish_connection(:db => db) + establish_connection(:db => db) unless connected && db == old rval = yield db - ActiveRecord::Base.connection_handler.clear_active_connections! - establish_connection(:db => old) - ActiveRecord::Base.connection_handler.clear_active_connections! unless connected + unless connected && db == old + ActiveRecord::Base.connection_handler.clear_active_connections! + + establish_connection(:db => old) + ActiveRecord::Base.connection_handler.clear_active_connections! unless connected + end rval end