uninitialized constant TanukiEmoji

Summary

In some situations a user may experience 500 errors in GitLab caused by some kind of issue with TanukiEmoji not initializing properly.

Steps to reproduce

Unknown

Example Project

None

What is the current bug behavior?

So far this error seems to have presented itself when viewing an MR, and when trying to export a project. Here are the errors:

uninitialized constant TanukiEmoji::Db::Gemojione\n\n      Db::Gemojione.new(index: self).load!\n        ^^^^^^^^^^^
uninitialized constant TanukiEmoji::Db::UnicodeVersion Db::UnicodeVersion.new(index: self).load! ^^^^^^^^^^^^^^^^ Did you mean? TanukiEmoji::Db::UnicodeOrdering

Example backtrace:

Example backtrace
[
    "tanuki_emoji (0.9.0) lib/tanuki_emoji/index.rb:117:in `load_data_files'",
    "tanuki_emoji (0.9.0) lib/tanuki_emoji/index.rb:107:in `initialize'",
    "/opt/gitlab/embedded/lib/ruby/3.1.0/singleton.rb:127:in `new'",
    "/opt/gitlab/embedded/lib/ruby/3.1.0/singleton.rb:127:in `block in instance'",
    "/opt/gitlab/embedded/lib/ruby/3.1.0/singleton.rb:125:in `synchronize'",
    "/opt/gitlab/embedded/lib/ruby/3.1.0/singleton.rb:125:in `instance'",
    "tanuki_emoji (0.9.0) lib/tanuki_emoji.rb:33:in `index'",
    "lib/banzai/filter/emoji_filter.rb:75:in `emoji_unicode_pattern_untrusted'",
    "lib/banzai/filter/emoji_filter.rb:86:in `emoji_unicode_pattern_untrusted'",
    "lib/banzai/filter/emoji_filter.rb:24:in `block in call'",
    "nokogiri-1.16.0-x86_64 (linux) lib/nokogiri/xml/node_set.rb:235:in `block in each'",
    "nokogiri-1.16.0-x86_64 (linux) lib/nokogiri/xml/node_set.rb:234:in `upto'",
    "nokogiri-1.16.0-x86_64 (linux) lib/nokogiri/xml/node_set.rb:234:in `each'",
    "lib/banzai/filter/emoji_filter.rb:18:in `call'",
    "lib/banzai/filter/concerns/timeout_filter_handler.rb:37:in `block in call'",
    "timeout (0.3.2) lib/timeout.rb:189:in `block in timeout'",
    "timeout (0.3.2) lib/timeout.rb:36:in `block in catch'",
    "timeout (0.3.2) lib/timeout.rb:36:in `catch'",
    "timeout (0.3.2) lib/timeout.rb:36:in `catch'",
    "timeout (0.3.2) lib/timeout.rb:198:in `timeout'",
    "lib/gitlab/render_timeout.rb:11:in `timeout'",
    "lib/banzai/filter/concerns/timeout_filter_handler.rb:37:in `call'",
    "lib/banzai/filter/concerns/pipeline_timing_check.rb:26:in `call'",
    "html-pipeline (2.14.3) lib/html/pipeline/filter.rb:129:in `call'",
    "html-pipeline (2.14.3) lib/html/pipeline.rb:134:in `block in perform_filter'",
    "html-pipeline (2.14.3) lib/html/pipeline.rb:174:in `block in instrument'",
    "activesupport (7.0.8.4) lib/active_support/notifications.rb:206:in `block in instrument'",
    "activesupport (7.0.8.4) lib/active_support/notifications/instrumenter.rb:24:in `instrument'",
    "activesupport (7.0.8.4) lib/active_support/notifications.rb:206:in `instrument'",
    "html-pipeline (2.14.3) lib/html/pipeline.rb:173:in `instrument'",
    "html-pipeline (2.14.3) lib/html/pipeline.rb:133:in `perform_filter'",
    "html-pipeline (2.14.3) lib/html/pipeline.rb:119:in `block (2 levels) in call'",
    "html-pipeline (2.14.3) lib/html/pipeline.rb:118:in `each'",
    "html-pipeline (2.14.3) lib/html/pipeline.rb:118:in `inject'",
    "html-pipeline (2.14.3) lib/html/pipeline.rb:118:in `block in call'",
    "html-pipeline (2.14.3) lib/html/pipeline.rb:174:in `block in instrument'",
    "activesupport (7.0.8.4) lib/active_support/notifications.rb:208:in `instrument'",
    "html-pipeline (2.14.3) lib/html/pipeline.rb:173:in `instrument'",
    "html-pipeline (2.14.3) lib/html/pipeline.rb:116:in `call'",
    "lib/banzai/pipeline/base_pipeline.rb:26:in `block (2 levels) in singleton class'",
    "lib/banzai/renderer.rb:131:in `block in render_result'",
    "lib/banzai/renderer.rb:217:in `instrument_filters'",
    "lib/banzai/renderer.rb:129:in `render_result'",
    "lib/banzai/renderer.rb:165:in `cacheless_render'",
    "lib/banzai/renderer.rb:31:in `render'",
    "lib/banzai.rb:16:in `render'",
    "app/services/markup/rendering_service.rb:40:in `markdown_unsafe'",
    "app/services/markup/rendering_service.rb:26:in `markup_unsafe'",
    "app/services/markup/rendering_service.rb:16:in `execute'",
    "app/helpers/markup_helper.rb:93:in `markdown'",
    "app/views/help/index.html.haml:35",
    "actionview (7.0.8.4) lib/action_view/base.rb:244:in `public_send'",
    "actionview (7.0.8.4) lib/action_view/base.rb:244:in `_run'",
    "actionview (7.0.8.4) lib/action_view/template.rb:157:in `block in render'",
    "activesupport (7.0.8.4) lib/active_support/notifications.rb:208:in `instrument'",
    "actionview (7.0.8.4) lib/action_view/template.rb:361:in `instrument_render_template'",
    "actionview (7.0.8.4) lib/action_view/template.rb:155:in `render'",
    "actionview (7.0.8.4) lib/action_view/renderer/template_renderer.rb:65:in `block (2 levels) in render_template'",
    "activesupport (7.0.8.4) lib/active_support/notifications.rb:206:in `block in instrument'",
    "activesupport (7.0.8.4) lib/active_support/notifications/instrumenter.rb:24:in `instrument'",
    "activesupport (7.0.8.4) lib/active_support/notifications.rb:206:in `instrument'",
    "actionview (7.0.8.4) lib/action_view/renderer/template_renderer.rb:60:in `block in render_template'",
    "actionview (7.0.8.4) lib/action_view/renderer/template_renderer.rb:75:in `block in render_with_layout'",
    "activesupport (7.0.8.4) lib/active_support/notifications.rb:208:in `instrument'",
    "actionview (7.0.8.4) lib/action_view/renderer/template_renderer.rb:74:in `render_with_layout'",
    "actionview (7.0.8.4) lib/action_view/renderer/template_renderer.rb:59:in `render_template'",
    "actionview (7.0.8.4) lib/action_view/renderer/template_renderer.rb:11:in `render'",
    "actionview (7.0.8.4) lib/action_view/renderer/renderer.rb:61:in `render_template_to_object'",
    "actionview (7.0.8.4) lib/action_view/renderer/renderer.rb:29:in `render_to_object'",
    "actionview (7.0.8.4) lib/action_view/rendering.rb:117:in `block in _render_template'",
    "actionview (7.0.8.4) lib/action_view/base.rb:270:in `in_rendering_context'",
    "actionview (7.0.8.4) lib/action_view/rendering.rb:116:in `_render_template'",
    "actionpack (7.0.8.4) lib/action_controller/metal/streaming.rb:216:in `_render_template'",
    "actionview (7.0.8.4) lib/action_view/rendering.rb:103:in `render_to_body'",
    "actionpack (7.0.8.4) lib/action_controller/metal/rendering.rb:158:in `render_to_body'",
    "actionpack (7.0.8.4) lib/action_controller/metal/renderers.rb:141:in `render_to_body'",
    "actionpack (7.0.8.4) lib/abstract_controller/rendering.rb:27:in `render'",
    "actionpack (7.0.8.4) lib/action_controller/metal/rendering.rb:139:in `render'",
    "actionpack (7.0.8.4) lib/action_controller/metal/instrumentation.rb:22:in `block (2 levels) in render'",
    "/opt/gitlab/embedded/lib/ruby/3.1.0/benchmark.rb:311:in `realtime'",
    "activesupport (7.0.8.4) lib/active_support/core_ext/benchmark.rb:14:in `ms'",
    "actionpack (7.0.8.4) lib/action_controller/metal/instrumentation.rb:22:in `block in render'",
    "actionpack (7.0.8.4) lib/action_controller/metal/instrumentation.rb:91:in `cleanup_view_runtime'",
    "activerecord (7.0.8.4) lib/active_record/railties/controller_runtime.rb:34:in `cleanup_view_runtime'",
    "elasticsearch-rails (7.2.1) lib/elasticsearch/rails/instrumentation/controller_runtime.rb:37:in `cleanup_view_runtime'",
    "actionpack (7.0.8.4) lib/action_controller/metal/instrumentation.rb:21:in `render'",
    "app/controllers/application_controller.rb:138:in `render'",
    "actionpack (7.0.8.4) lib/action_controller/metal/implicit_render.rb:35:in `default_render'",
    "actionpack (7.0.8.4) lib/action_controller/metal/basic_implicit_render.rb:7:in `send_action'",
    "actionpack (7.0.8.4) lib/abstract_controller/base.rb:215:in `process_action'",
    "actionpack (7.0.8.4) lib/action_controller/metal/rendering.rb:165:in `process_action'",
    "actionpack (7.0.8.4) lib/abstract_controller/callbacks.rb:234:in `block in process_action'",
    "activesupport (7.0.8.4) lib/active_support/callbacks.rb:118:in `block in run_callbacks'",
    "app/controllers/application_controller.rb:474:in `set_current_admin'",
    "activesupport (7.0.8.4) lib/active_support/callbacks.rb:127:in `block in run_callbacks'",
    "lib/gitlab/session.rb:11:in `with_session'",
    "app/controllers/application_controller.rb:465:in `set_session_storage'",
    "activesupport (7.0.8.4) lib/active_support/callbacks.rb:127:in `block in run_callbacks'",
    "lib/gitlab/i18n.rb:114:in `with_locale'",
    "lib/gitlab/i18n.rb:120:in `with_user_locale'",
    "app/controllers/application_controller.rb:456:in `set_locale'",
    "activesupport (7.0.8.4) lib/active_support/callbacks.rb:127:in `block in run_callbacks'",
    "marginalia (1.11.1) lib/marginalia.rb:109:in `record_query_comment'",
    "activesupport (7.0.8.4) lib/active_support/callbacks.rb:127:in `block in run_callbacks'",
    "app/controllers/application_controller.rb:449:in `set_current_context'",
    "activesupport (7.0.8.4) lib/active_support/callbacks.rb:127:in `block in run_callbacks'",
    "sentry-rails (5.18.2) lib/sentry/rails/controller_transaction.rb:30:in `block in sentry_around_action'",
    "sentry-ruby (5.18.2) lib/sentry/hub.rb:102:in `with_child_span'",
    "sentry-ruby (5.18.2) lib/sentry-ruby.rb:491:in `with_child_span'",
    "sentry-rails (5.18.2) lib/sentry/rails/controller_transaction.rb:16:in `sentry_around_action'",
    "activesupport (7.0.8.4) lib/active_support/callbacks.rb:127:in `block in run_callbacks'",
    "activesupport (7.0.8.4) lib/active_support/callbacks.rb:138:in `run_callbacks'",
    "actionpack (7.0.8.4) lib/abstract_controller/callbacks.rb:233:in `process_action'",
    "actionpack (7.0.8.4) lib/action_controller/metal/rescue.rb:23:in `process_action'",
    "actionpack (7.0.8.4) lib/action_controller/metal/instrumentation.rb:67:in `block in process_action'",
    "activesupport (7.0.8.4) lib/active_support/notifications.rb:206:in `block in instrument'",
    "activesupport (7.0.8.4) lib/active_support/notifications/instrumenter.rb:24:in `instrument'",
    "activesupport (7.0.8.4) lib/active_support/notifications.rb:206:in `instrument'",
    "actionpack (7.0.8.4) lib/action_controller/metal/instrumentation.rb:66:in `process_action'",
    "actionpack (7.0.8.4) lib/action_controller/metal/params_wrapper.rb:259:in `process_action'",
    "activerecord (7.0.8.4) lib/active_record/railties/controller_runtime.rb:27:in `process_action'",
    "actionpack (7.0.8.4) lib/abstract_controller/base.rb:151:in `process'",
    "actionview (7.0.8.4) lib/action_view/rendering.rb:39:in `process'",
    "actionpack (7.0.8.4) lib/action_controller/metal.rb:188:in `dispatch'",
    "actionpack (7.0.8.4) lib/action_controller/metal.rb:251:in `dispatch'",
    "actionpack (7.0.8.4) lib/action_dispatch/routing/route_set.rb:49:in `dispatch'",
    "actionpack (7.0.8.4) lib/action_dispatch/routing/route_set.rb:32:in `serve'",
    "actionpack (7.0.8.4) lib/action_dispatch/journey/router.rb:50:in `block in serve'",
    "actionpack (7.0.8.4) lib/action_dispatch/journey/router.rb:32:in `each'",
    "actionpack (7.0.8.4) lib/action_dispatch/journey/router.rb:32:in `serve'",
    "actionpack (7.0.8.4) lib/action_dispatch/routing/route_set.rb:852:in `call'",
    "gitlab-experiment (0.9.1) lib/gitlab/experiment/middleware.rb:19:in `call'",
    "omniauth (2.1.0) lib/omniauth/strategy.rb:202:in `call!'",
    "omniauth (2.1.0) lib/omniauth/strategy.rb:169:in `call'",
    "omniauth (2.1.0) lib/omniauth/strategy.rb:202:in `call!'",
    "omniauth (2.1.0) lib/omniauth/strategy.rb:169:in `call'",
    "flipper (0.26.2) lib/flipper/middleware/memoizer.rb:72:in `memoized_call'",
    "flipper (0.26.2) lib/flipper/middleware/memoizer.rb:37:in `call'",
    "lib/gitlab/metrics/elasticsearch_rack_middleware.rb:16:in `call'",
    "lib/gitlab/middleware/sidekiq_shard_awareness_validation.rb:20:in `block in call'",
    "lib/gitlab/sidekiq_sharding/validator.rb:42:in `enabled'",
    "lib/gitlab/middleware/sidekiq_shard_awareness_validation.rb:20:in `call'",
    "lib/gitlab/middleware/memory_report.rb:13:in `call'",
    "lib/gitlab/middleware/speedscope.rb:13:in `call'",
    "lib/gitlab/database/load_balancing/rack_middleware.rb:23:in `call'",
    "lib/gitlab/middleware/rails_queue_duration.rb:33:in `call'",
    "lib/gitlab/etag_caching/middleware.rb:21:in `call'",
    "lib/gitlab/metrics/rack_middleware.rb:16:in `block in call'",
    "lib/gitlab/metrics/web_transaction.rb:46:in `run'",
    "lib/gitlab/metrics/rack_middleware.rb:16:in `call'",
    "lib/gitlab/middleware/go.rb:24:in `call'",
    "lib/gitlab/middleware/query_analyzer.rb:11:in `block in call'",
    "lib/gitlab/database/query_analyzer.rb:40:in `within'",
    "lib/gitlab/middleware/query_analyzer.rb:11:in `call'",
    "batch-loader (2.0.5) lib/batch_loader/middleware.rb:11:in `call'",
    "rack-attack (6.7.0) lib/rack/attack.rb:103:in `call'",
    "apollo_upload_server (2.1.6) lib/apollo_upload_server/middleware.rb:19:in `call'",
    "lib/gitlab/middleware/multipart.rb:173:in `call'",
    "rack-attack (6.7.0) lib/rack/attack.rb:127:in `call'",
    "warden (1.2.9) lib/warden/manager.rb:36:in `block in call'",
    "warden (1.2.9) lib/warden/manager.rb:34:in `catch'",
    "warden (1.2.9) lib/warden/manager.rb:34:in `call'",
    "rack-cors (2.0.2) lib/rack/cors.rb:102:in `call'",
    "rack (2.2.9) lib/rack/tempfile_reaper.rb:15:in `call'",
    "rack (2.2.9) lib/rack/etag.rb:27:in `call'",
    "rack (2.2.9) lib/rack/conditional_get.rb:27:in `call'",
    "rack (2.2.9) lib/rack/head.rb:12:in `call'",
    "actionpack (7.0.8.4) lib/action_dispatch/http/permissions_policy.rb:38:in `call'",
    "actionpack (7.0.8.4) lib/action_dispatch/http/content_security_policy.rb:36:in `call'",
    "lib/gitlab/middleware/read_only/controller.rb:50:in `call'",
    "lib/gitlab/middleware/read_only.rb:18:in `call'",
    "lib/gitlab/middleware/unauthenticated_session_expiry.rb:18:in `call'",
    "rack (2.2.9) lib/rack/session/abstract/id.rb:266:in `context'",
    "rack (2.2.9) lib/rack/session/abstract/id.rb:260:in `call'",
    "actionpack (7.0.8.4) lib/action_dispatch/middleware/cookies.rb:704:in `call'",
    "lib/gitlab/middleware/same_site_cookies.rb:27:in `call'",
    "actionpack (7.0.8.4) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'",
    "activesupport (7.0.8.4) lib/active_support/callbacks.rb:99:in `run_callbacks'",
    "actionpack (7.0.8.4) lib/action_dispatch/middleware/callbacks.rb:26:in `call'",
    "sentry-rails (5.18.2) lib/sentry/rails/rescued_exception_interceptor.rb:12:in `call'",
    "actionpack (7.0.8.4) lib/action_dispatch/middleware/debug_exceptions.rb:28:in `call'",
    "lib/gitlab/middleware/path_traversal_check.rb:27:in `call'",
    "lib/gitlab/middleware/handle_malformed_strings.rb:21:in `call'",
    "sentry-ruby (5.18.2) lib/sentry/rack/capture_exceptions.rb:30:in `block (2 levels) in call'",
    "sentry-ruby (5.18.2) lib/sentry/hub.rb:258:in `with_session_tracking'",
    "sentry-ruby (5.18.2) lib/sentry-ruby.rb:404:in `with_session_tracking'",
    "sentry-ruby (5.18.2) lib/sentry/rack/capture_exceptions.rb:21:in `block in call'",
    "sentry-ruby (5.18.2) lib/sentry/hub.rb:59:in `with_scope'",
    "sentry-ruby (5.18.2) lib/sentry-ruby.rb:384:in `with_scope'",
    "sentry-ruby (5.18.2) lib/sentry/rack/capture_exceptions.rb:20:in `call'",
    "actionpack (7.0.8.4) lib/action_dispatch/middleware/show_exceptions.rb:29:in `call'",
    "lib/gitlab/middleware/basic_health_check.rb:25:in `call'",
    "lograge (0.11.2) lib/lograge/rails_ext/rack/logger.rb:15:in `call_app'",
    "railties (7.0.8.4) lib/rails/rack/logger.rb:25:in `block in call'",
    "activesupport (7.0.8.4) lib/active_support/tagged_logging.rb:99:in `block in tagged'",
    "activesupport (7.0.8.4) lib/active_support/tagged_logging.rb:37:in `tagged'",
    "activesupport (7.0.8.4) lib/active_support/tagged_logging.rb:99:in `tagged'",
    "railties (7.0.8.4) lib/rails/rack/logger.rb:25:in `call'",
    "actionpack (7.0.8.4) lib/action_dispatch/middleware/remote_ip.rb:93:in `call'",
    "lib/gitlab/middleware/handle_ip_spoof_attack_error.rb:25:in `call'",
    "lib/gitlab/middleware/request_context.rb:15:in `call'",
    "lib/gitlab/middleware/webhook_recursion_detection.rb:15:in `call'",
    "request_store (1.5.1) lib/request_store/middleware.rb:19:in `call'",
    "rack (2.2.9) lib/rack/method_override.rb:24:in `call'",
    "rack (2.2.9) lib/rack/runtime.rb:22:in `call'",
    "rack-timeout (0.7.0) lib/rack/timeout/core.rb:154:in `block in call'",
    "rack-timeout (0.7.0) lib/rack/timeout/support/timeout.rb:19:in `timeout'",
    "rack-timeout (0.7.0) lib/rack/timeout/core.rb:153:in `call'",
    "config/initializers/fix_local_cache_middleware.rb:11:in `call'",
    "lib/gitlab/middleware/compressed_json.rb:44:in `call'",
    "actionpack (7.0.8.4) lib/action_dispatch/middleware/executor.rb:14:in `call'",
    "lib/gitlab/middleware/rack_multipart_tempfile_factory.rb:19:in `call'",
    "rack (2.2.9) lib/rack/sendfile.rb:110:in `call'",
    "lib/gitlab/middleware/sidekiq_web_static.rb:20:in `call'",
    "lib/gitlab/metrics/requests_rack_middleware.rb:79:in `call'",
    "gitlab-labkit (0.36.1) lib/labkit/middleware/rack.rb:22:in `block in call'",
    "gitlab-labkit (0.36.1) lib/labkit/context.rb:35:in `with_context'",
    "gitlab-labkit (0.36.1) lib/labkit/middleware/rack.rb:21:in `call'",
    "actionpack (7.0.8.4) lib/action_dispatch/middleware/request_id.rb:26:in `call'",
    "actionpack (7.0.8.4) lib/action_dispatch/middleware/host_authorization.rb:131:in `call'",
    "railties (7.0.8.4) lib/rails/engine.rb:530:in `call'",
    "railties (7.0.8.4) lib/rails/railtie.rb:226:in `public_send'",
    "railties (7.0.8.4) lib/rails/railtie.rb:226:in `method_missing'",
    "lib/gitlab/middleware/release_env.rb:13:in `call'",
    "rack (2.2.9) lib/rack/urlmap.rb:74:in `block in call'",
    "rack (2.2.9) lib/rack/urlmap.rb:58:in `each'",
    "rack (2.2.9) lib/rack/urlmap.rb:58:in `call'",
    "puma (6.4.0) lib/puma/configuration.rb:272:in `call'",
    "puma (6.4.0) lib/puma/request.rb:100:in `block in handle_request'",
    "puma (6.4.0) lib/puma/thread_pool.rb:378:in `with_force_shutdown'",
    "puma (6.4.0) lib/puma/request.rb:99:in `handle_request'",
    "puma (6.4.0) lib/puma/server.rb:443:in `process_client'",
    "puma (6.4.0) lib/puma/server.rb:241:in `block in run'",
    "puma (6.4.0) lib/puma/thread_pool.rb:155:in `block in spawn_thread'"
  ],

What is the expected correct behavior?

Relevant logs and/or screenshots

Output of checks

Results of GitLab environment info

Expand for output related to GitLab environment info

(For installations with omnibus-gitlab package run and paste the output of:
`sudo gitlab-rake gitlab:env:info`)

(For installations from source run and paste the output of:
`sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production`)

Results of GitLab application Check

Expand for output related to the GitLab application check

(For installations with omnibus-gitlab package run and paste the output of: sudo gitlab-rake gitlab:check SANITIZE=true)

(For installations from source run and paste the output of: sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production SANITIZE=true)

(we will only investigate if the tests are passing)

Possible fixes

Edited by Peter Leitzen