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

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

diff --git a/lib/plugin_initialization_guard.rb b/lib/plugin_initialization_guard.rb
index a5a164e..11fd943 100644
--- a/lib/plugin_initialization_guard.rb
+++ b/lib/plugin_initialization_guard.rb
@@ -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
-
-    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")
-
-    STDERR.puts <<~MESSAGE
-      #{stack_trace}
-
-      ** INCOMPATIBLE PLUGIN **
-
-      You are unable to build Discourse due to errors in the plugin at
-      #{plugin_path}
-
-      Please try removing this plugin and rebuilding again!
-    MESSAGE
+    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
+
+      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}
+
+        ** INCOMPATIBLE PLUGIN **
+
+        You are unable to build Discourse due to errors in the plugin at
+        #{plugin_path}
+
+        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

GitHub sha: b4c5ff17

1 Like