FIX: Show a useful message when starting a plugin fails without a backtrace

This commit is contained in:
Daniel Waterworth 2020-05-19 14:03:54 +01:00
parent 7c3663ff73
commit b4c5ff17a3

View File

@ -6,33 +6,44 @@ def plugin_initialization_guard(&block)
rescue => error
plugins_directory = Rails.root + 'plugins'
plugin_path = error.backtrace_locations.lazy.map do |location|
Pathname.new(location.absolute_path)
.ascend
.lazy
.find { |path| path.parent == plugins_directory }
end.next
if error.backtrace
plugin_path = error.backtrace_locations.lazy.map do |location|
Pathname.new(location.absolute_path)
.ascend
.lazy
.find { |path| path.parent == plugins_directory }
end.next
raise unless plugin_path
raise unless plugin_path
stack_trace = error.backtrace.each_with_index.inject([]) do |messages, (line, index)|
if index == 0
messages << "#{line}: #{error} (#{error.class})"
else
messages << "\t#{index}: from #{line}"
end
end.reverse.join("\n")
stack_trace = error.backtrace.each_with_index.inject([]) do |messages, (line, index)|
if index == 0
messages << "#{line}: #{error} (#{error.class})"
else
messages << "\t#{index}: from #{line}"
end
end.reverse.join("\n")
STDERR.puts <<~MESSAGE
#{stack_trace}
STDERR.puts <<~MESSAGE
#{stack_trace}
** INCOMPATIBLE PLUGIN **
** INCOMPATIBLE PLUGIN **
You are unable to build Discourse due to errors in the plugin at
#{plugin_path}
You are unable to build Discourse due to errors in the plugin at
#{plugin_path}
Please try removing this plugin and rebuilding again!
MESSAGE
Please try removing this plugin and rebuilding again!
MESSAGE
else
STDERR.puts <<~MESSAGE
** PLUGIN FAILURE **
You are unable to build Discourse due to this error during plugin
initialization:
#{error}
MESSAGE
end
exit 1
end
end