Browse Source

More stable error reporting

development
Godwin 9 years ago
parent
commit
2ee8849153
  1. 25
      app/controllers/application_controller.rb

25
app/controllers/application_controller.rb

@ -115,6 +115,12 @@ class ApplicationController < LinguaFrancaApplicationController
else else
report += " in <code>#{params[:url]}:#{params[:lineNumber]}</code>" report += " in <code>#{params[:url]}:#{params[:lineNumber]}</code>"
end end
suppress(Exception) do
# log the error
logger.info exception.to_s
logger.info exception.backtrace.join("\n")
UserMailer.error_report( UserMailer.error_report(
"A JavaScript error has occurred", "A JavaScript error has occurred",
report, report,
@ -124,6 +130,7 @@ class ApplicationController < LinguaFrancaApplicationController
params, params,
current_user, current_user,
).deliver_now if Rails.env.preview? || Rails.env.production? ).deliver_now if Rails.env.preview? || Rails.env.production?
end
render json: {} render json: {}
end end
@ -149,7 +156,12 @@ class ApplicationController < LinguaFrancaApplicationController
end end
rescue_from StandardError do |exception| rescue_from StandardError do |exception|
# log the error
logger.info exception.to_s
logger.info exception.backtrace.join("\n")
# send and email if this is production # send and email if this is production
suppress(Exception) do
UserMailer.error_report( UserMailer.error_report(
"An error has occurred in #{Rails.env}", "An error has occurred in #{Rails.env}",
nil, nil,
@ -159,16 +171,13 @@ class ApplicationController < LinguaFrancaApplicationController
params, params,
current_user, current_user,
).deliver_now if Rails.env.preview? || Rails.env.production? ).deliver_now if Rails.env.preview? || Rails.env.production?
end
# log the error # raise the error if we are in development so that we can debug it
logger.info exception.to_s raise exception if Rails.env.development?
logger.info exception.backtrace.join("\n")
# show the error page # show the error page
error_500 exception error_500 exception
# raise the error if we are in development so that we can debug it
raise exception if Rails.env.development?
end end
def generate_confirmation(user, url, expiry = nil) def generate_confirmation(user, url, expiry = nil)
@ -207,7 +216,7 @@ class ApplicationController < LinguaFrancaApplicationController
user.save! user.save!
end end
# genereate the confirmation, send the email and show the 403 # generate the confirmation, send the email and show the 403
referrer = request.referer.gsub(/^.*?\/\/.*?\//, '/') referrer = request.referer.gsub(/^.*?\/\/.*?\//, '/')
generate_confirmation(params[:email], referrer) generate_confirmation(params[:email], referrer)
template = 'login_confirmation_sent' template = 'login_confirmation_sent'
@ -300,6 +309,7 @@ class ApplicationController < LinguaFrancaApplicationController
def i18n_exception(str, exception, locale, key) def i18n_exception(str, exception, locale, key)
# send and email if this is production # send and email if this is production
suppress(Exception) do
UserMailer.error_report( UserMailer.error_report(
"A missing translation found in #{Rails.env}", "A missing translation found in #{Rails.env}",
"<p>A translation for <code>#{key}</code> in <code>#{locale.to_s}</code> was found. The text that was rendered to the user was:</p><blockquote>#{str || 'nil'}</blockquote>", "<p>A translation for <code>#{key}</code> in <code>#{locale.to_s}</code> was found. The text that was rendered to the user was:</p><blockquote>#{str || 'nil'}</blockquote>",
@ -311,4 +321,5 @@ class ApplicationController < LinguaFrancaApplicationController
).deliver_now if Rails.env.preview? || Rails.env.production? ).deliver_now if Rails.env.preview? || Rails.env.production?
logger.info "Missing translation found for: #{key}" logger.info "Missing translation found for: #{key}"
end end
end
end end

Loading…
Cancel
Save