From 7fbf162666e7f2860746bcfd6ed44d2bc426a6d4 Mon Sep 17 00:00:00 2001 From: Sam <sam.saffron@gmail.com> Date: Sat, 24 May 2014 22:50:39 +1000 Subject: [PATCH] Logster update cleans up a bunch of messed up context stuff with multisite improves backtraces adds request params --- Gemfile.lock | 2 +- app/controllers/forums_controller.rb | 2 +- .../common/_discourse_javascript.html.erb | 14 +++++------ config/initializers/logster.rb | 23 ++++++++++++++++++- config/routes.rb | 11 +++++---- .../lib/rails_multisite/railtie.rb | 2 ++ 6 files changed, 39 insertions(+), 15 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 1db7969fb28..2782bf77ff5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -152,7 +152,7 @@ GEM thor (~> 0.15) libv8 (3.16.14.3) listen (0.7.3) - logster (0.0.9) + logster (0.0.10) lru_redux (0.8.1) mail (2.5.4) mime-types (~> 1.16) diff --git a/app/controllers/forums_controller.rb b/app/controllers/forums_controller.rb index 55545fdcea5..a15b6090ee3 100644 --- a/app/controllers/forums_controller.rb +++ b/app/controllers/forums_controller.rb @@ -1,6 +1,6 @@ class ForumsController < ApplicationController - skip_before_filter :check_xhr, only: [:status] + skip_before_filter :check_xhr skip_before_filter :authorize_mini_profiler, only: [:status] skip_before_filter :redirect_to_login_if_required, only: [:status] diff --git a/app/views/common/_discourse_javascript.html.erb b/app/views/common/_discourse_javascript.html.erb index 10174348ffb..060783800b1 100644 --- a/app/views/common/_discourse_javascript.html.erb +++ b/app/views/common/_discourse_javascript.html.erb @@ -11,10 +11,9 @@ })(); </script> -<% if Rails.env.development? %> - <script> - // Don't swallow promises in development mode. Let's fix those. - Ember.RSVP.configure('onerror', function(e) { +<script> + Ember.RSVP.configure('onerror', function(e) { + <% if Rails.env.development? %> if (e) { if (e.message || e.stack) { console.log(e.message); @@ -25,9 +24,10 @@ } else { console.log("A promise failed but was not caught."); } - }); - </script> -<% end %> + <% end %> + window.onerror(e && e.message, null,null,null,e); + }); +</script> <script> Discourse.CDN = '<%= Rails.configuration.action_controller.asset_host %>'; diff --git a/config/initializers/logster.rb b/config/initializers/logster.rb index 8a2b8250422..7a525aa5cb1 100644 --- a/config/initializers/logster.rb +++ b/config/initializers/logster.rb @@ -1,6 +1,27 @@ if Rails.env.production? # honestly, Rails should not be logging this, its real noisy Logster.store.ignore = [ - /^ActionController::RoutingError \(No route matches/ + /^ActionController::RoutingError \(No route matches/ ] + + Logster.config.authorize_callback = lambda{|env| + user = CurrentUser.lookup_from_env(env) + user && user.admin + } end + +# middleware that logs errors sits before multisite +# we need to establish a connection so redis connection is good +# and db connection is good +Logster.config.current_context = lambda{|env,&blk| + begin + if Rails.configuration.multisite + request = Rack::Request.new(env) + ActiveRecord::Base.connection_handler.clear_active_connections! + RailsMultisite::ConnectionManagement.establish_connection(:host => request['__ws'] || request.host) + end + blk.call + ensure + ActiveRecord::Base.connection_handler.clear_active_connections! + end +} diff --git a/config/routes.rb b/config/routes.rb index 98e05414221..47b6939a765 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -14,11 +14,12 @@ Discourse::Application.routes.draw do match "/404", to: "exceptions#not_found", via: [:get, :post] get "/404-body" => "exceptions#not_found_body" - mount Sidekiq::Web => "/sidekiq", constraints: AdminConstraint.new - - if Rails.env.production? - require 'logster/middleware/viewer' - mount Logster::Middleware::Viewer.new(nil) => "/logs", constraints: AdminConstraint.new + if Rails.env == "development" + mount Sidekiq::Web => "/sidekiq" + mount Logster::Web => "/logs" + else + mount Sidekiq::Web => "/sidekiq", constraints: AdminConstraint.new + mount Logster::Web => "/logs", constraints: AdminConstraint.new end get "site" => "site#index" diff --git a/vendor/gems/rails_multisite/lib/rails_multisite/railtie.rb b/vendor/gems/rails_multisite/lib/rails_multisite/railtie.rb index ad95ba2ae8a..68c8c71e5ff 100644 --- a/vendor/gems/rails_multisite/lib/rails_multisite/railtie.rb +++ b/vendor/gems/rails_multisite/lib/rails_multisite/railtie.rb @@ -5,7 +5,9 @@ module RailsMultisite end initializer "RailsMultisite.init" do |app| + Rails.configuration.multisite = false if File.exists?(ConnectionManagement.config_filename) + Rails.configuration.multisite = true ConnectionManagement.load_settings! app.middleware.insert_after(ActiveRecord::ConnectionAdapters::ConnectionManagement, RailsMultisite::ConnectionManagement) app.middleware.delete(ActiveRecord::ConnectionAdapters::ConnectionManagement)