All pages that render icons return 500
As seen in dev.gitlab.org
, almost all pages are failing with a 500 error. https://sentry.gitlab.net/gitlab/devgitlaborg/issues/1122956/?query=is:unresolved
This is a regression from !17819 (merged) / 1ee162b6.
Particularly this change:
diff --git a/app/helpers/icons_helper.rb b/app/helpers/icons_helper.rb
index 4f73270577f..b79766e3a65 100644
--- a/app/helpers/icons_helper.rb
+++ b/app/helpers/icons_helper.rb
@@ -42,11 +42,9 @@ module IconsHelper
end
def sprite_icon(icon_name, size: nil, css_class: nil)
- if Gitlab::Sentry.should_raise_for_dev?
- unless known_sprites.include?(icon_name)
- exception = ArgumentError.new("#{icon_name} is not a known icon in @gitlab-org/gitlab-svg")
- raise exception
- end
+ unless known_sprites.include?(icon_name)
+ exception = ArgumentError.new("#{icon_name} is not a known icon in @gitlab-org/gitlab-svg")
+ Gitlab::Sentry.track_and_raise_for_dev_exception(exception)
end
css_classes = []
known_sprites
reads node_modules/@gitlab/svgs/dist/icons.json
which doesn't exist in omnibus installs because we clean up after we compile assets causing it to fail with ActionView::Template::error: No such file or directory @ rb_sysopen - /opt/gitlab/embedded/service/gitlab-rails/node_modules/@gitlab/svgs/dist/icons.json
Possible fix
To keep previous behavior, we might need to do something like:
diff --git a/app/helpers/icons_helper.rb b/app/helpers/icons_helper.rb
index b79766e3a65..63f7b10dc48 100644
--- a/app/helpers/icons_helper.rb
+++ b/app/helpers/icons_helper.rb
@@ -42,7 +42,7 @@ module IconsHelper
end
def sprite_icon(icon_name, size: nil, css_class: nil)
- unless known_sprites.include?(icon_name)
+ if Gitlab::Sentry.should_raise_for_dev? && !known_sprites.include?(icon_name)
exception = ArgumentError.new("#{icon_name} is not a known icon in @gitlab-org/gitlab-svg")
Gitlab::Sentry.track_and_raise_for_dev_exception(exception)
end
UPDATE: I see this doesn't work because Gitlab::Sentry.should_raise_for_dev?
is now private. Maybe we could just do the Rails.env.development? || Rails.env.test?
check here or do:
diff --git a/app/helpers/icons_helper.rb b/app/helpers/icons_helper.rb
index b79766e3a65..66507248eb7 100644
--- a/app/helpers/icons_helper.rb
+++ b/app/helpers/icons_helper.rb
@@ -42,7 +42,7 @@ module IconsHelper
end
def sprite_icon(icon_name, size: nil, css_class: nil)
- unless known_sprites.include?(icon_name)
+ if known_sprites && !known_sprites.include?(icon_name)
exception = ArgumentError.new("#{icon_name} is not a known icon in @gitlab-org/gitlab-svg")
Gitlab::Sentry.track_and_raise_for_dev_exception(exception)
end
@@ -156,6 +156,8 @@ module IconsHelper
private
def known_sprites
+ return if Rails.env.production?
+
@known_sprites ||= JSON.parse(File.read(Rails.root.join('node_modules/@gitlab/svgs/dist/icons.json')))['icons']
end
end
So that we won't ever try to read that file in production.