Error ”fa-user should be updated to user" when a bot is scraping

AI-generated summary

The discussion revolves around an error message “The icon name ‘fa-user’ has been removed and should be updated to ‘user’” that occurs when a bot is scraping content from a Discourse forum. Jagster reports that this error only happens with bots, not real users, and provides an example of the error with details such as hostname, process ID, and HTTP user agent.

Jagster mentions that the error started on March 29 and has been getting worse every day. They suspect it might be related to a plugin or theme/component, but are unsure how to find the cause. Moin suggests that the geo blocking plugin might be the culprit, pointing to a specific line of code in the plugin’s repository. Jagster has moved the discussion to the support category for further assistance.

I get a lot error The icon name "fa-user" has been removed and should be updated to "user"when a bot is scraping content, no matter if it is using GET and reaching a topic, tag, user, ./well-known… etc. That error comes only from bots, never by real users.

This is one example:

hostname foorumi-hel-web-only
process_id 1173
application_version f0057c7353b8c81e5c315f51d1be06c8e22e4731
HTTP_HOST foorumi.katiska.eu
REQUEST_URI /.well-known/traffic-advice
REQUEST_METHOD GET
HTTP_USER_AGENT lwp-request/6.61 libwww-perl/6.61
HTTP_X_FORWARDED_FOR 138.197.182.164
HTTP_X_REAL_IP 138.197.182.164
time 10:04 am
backtrace
Message (26 copies reported)

Missing icon error: The icon name "fa-user" has been removed and should be updated to "user" in your code. More info at https://meta.discourse.org/t/325349.

Backtrace

/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:134:in `block in error'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:134:in `error'
/var/www/discourse/lib/deprecated_icon_handler.rb:693:in `convert_icon'
/var/www/discourse/lib/svg_sprite.rb:533:in `process'
/var/www/discourse/lib/svg_sprite.rb:437:in `search'
/var/www/discourse/lib/svg_sprite.rb:452:in `block in raw_svg'
/var/www/discourse/lib/distributed_cache.rb:20:in `defer_get_set'
/var/www/discourse/lib/svg_sprite.rb:537:in `get_set_cache'
/var/www/discourse/lib/svg_sprite.rb:451:in `raw_svg'
/var/www/discourse/plugins/discourse-geo-blocking/app/views/exceptions/not_found.html.erb:5:in `_plugins_discourse_geo_blocking_app_views_exceptions_not_found_html_erb___1317140915584559193_287120'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionview-7.2.2.1/lib/action_view/base.rb:281:in `public_send'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionview-7.2.2.1/lib/action_view/base.rb:281:in `_run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionview-7.2.2.1/lib/action_view/template.rb:285:in `block in render'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/notifications.rb:212:in `instrument'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionview-7.2.2.1/lib/action_view/template.rb:584:in `instrument_render_template'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionview-7.2.2.1/lib/action_view/template.rb:273:in `render'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionview-7.2.2.1/lib/action_view/renderer/template_renderer.rb:66:in `block (2 levels) in render_template'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/notifications.rb:212:in `instrument'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionview-7.2.2.1/lib/action_view/renderer/template_renderer.rb:60:in `block in render_template'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionview-7.2.2.1/lib/action_view/renderer/template_renderer.rb:76:in `block in render_with_layout'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/notifications.rb:210:in `block in instrument'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/notifications/instrumenter.rb:58:in `instrument'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/notifications.rb:210:in `instrument'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionview-7.2.2.1/lib/action_view/renderer/template_renderer.rb:75:in `render_with_layout'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionview-7.2.2.1/lib/action_view/renderer/template_renderer.rb:59:in `render_template'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionview-7.2.2.1/lib/action_view/renderer/template_renderer.rb:11:in `render'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionview-7.2.2.1/lib/action_view/renderer/renderer.rb:58:in `render_template_to_object'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionview-7.2.2.1/lib/action_view/renderer/renderer.rb:31:in `render_to_object'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionview-7.2.2.1/lib/action_view/rendering.rb:135:in `block in _render_template'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionview-7.2.2.1/lib/action_view/base.rb:308:in `in_rendering_context'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionview-7.2.2.1/lib/action_view/rendering.rb:134:in `_render_template'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-7.2.2.1/lib/action_controller/metal/streaming.rb:258:in `_render_template'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionview-7.2.2.1/lib/action_view/rendering.rb:121:in `render_to_body'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-7.2.2.1/lib/action_controller/metal/rendering.rb:186:in `render_to_body'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-7.2.2.1/lib/action_controller/metal/renderers.rb:142:in `render_to_body'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-7.2.2.1/lib/abstract_controller/rendering.rb:47:in `render_to_string'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-7.2.2.1/lib/action_controller/metal/rendering.rb:175:in `render_to_string'
/var/www/discourse/app/controllers/application_controller.rb:894:in `build_not_found_page'
/var/www/discourse/app/controllers/application_controller.rb:347:in `block in rescue_discourse_actions'
/var/www/discourse/app/controllers/application_controller.rb:427:in `block in with_resolved_locale'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/i18n-1.14.7/lib/i18n.rb:353:in `with_locale'
/var/www/discourse/app/controllers/application_controller.rb:427:in `with_resolved_locale'
/var/www/discourse/app/controllers/application_controller.rb:345:in `rescue_discourse_actions'
/var/www/discourse/plugins/discourse-geo-blocking/plugin.rb:27:in `rescue_discourse_actions'
/var/www/discourse/app/controllers/application_controller.rb:159:in `block in <class:ApplicationController>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/rescuable.rb:116:in `instance_exec'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/rescuable.rb:116:in `block in handler_for_rescue'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/rescuable.rb:94:in `rescue_with_handler'
/var/www/discourse/lib/middleware/discourse_public_exceptions.rb:67:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-7.2.2.1/lib/action_dispatch/middleware/show_exceptions.rb:55:in `render_exception'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-7.2.2.1/lib/action_dispatch/middleware/show_exceptions.rb:41:in `rescue in call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-7.2.2.1/lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/logster-2.20.1/lib/logster/middleware/reporter.rb:40:in `call'
/var/www/discourse/lib/middleware/default_headers.rb:13:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/rack/logger.rb:41:in `call_app'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/rack/logger.rb:29:in `call'
/var/www/discourse/config/initializers/100-quiet_logger.rb:20:in `call'
/var/www/discourse/config/initializers/100-silence_logger.rb:29:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-7.2.2.1/lib/action_dispatch/middleware/request_id.rb:33:in `call'
/var/www/discourse/lib/middleware/enforce_hostname.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-2.2.13/lib/rack/method_override.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-7.2.2.1/lib/action_dispatch/middleware/executor.rb:16:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-2.2.13/lib/rack/sendfile.rb:110:in `call'
/var/www/discourse/lib/middleware/processing_request.rb:12:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.4.1/lib/message_bus/rack/middleware.rb:60:in `call'
/var/www/discourse/lib/middleware/request_tracker.rb:385:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/actionpack-7.2.2.1/lib/action_dispatch/middleware/remote_ip.rb:96:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/engine.rb:535:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/railtie.rb:226:in `public_send'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/railtie.rb:226:in `method_missing'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-2.2.13/lib/rack/urlmap.rb:74:in `block in call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-2.2.13/lib/rack/urlmap.rb:58:in `each'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-2.2.13/lib/rack/urlmap.rb:58:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:634:in `process_client'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:739:in `worker_loop'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:143:in `start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/unicorn-6.1.0/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/bin/unicorn:25:in `load'
/var/www/discourse/vendor/bundle/ruby/3.3.0/bin/unicorn:25:in `<main>'

Env

HTTP HOSTS: foorumi.katiska.eu

I tried GET from my other VPS and didn’t raise that error, though. Perhaps because I didn’ tell any user agent?

Only thing I found with GET that is somehow related to user icon is login-button, but it can’t be it, right?

I tried to find when this started and it looks like it all started March 29, and is going worse everyday.

I’m on quite recent Discourse, I upgraded Monday, I think.

Ideas? Sure, it can come from some plugin or theme/component, but how could I find it?

(I’m using Contribute > Bug because I get errors from something that didn’t happen before)

Edit

i checked what I did 29. Mar and back then I moved from the component Category Icons to new the system.

I think it happens because of the geo blocking plugin

I moved this to support, because it is the easiest way to close this :smirking_face:

Sure, I could flag this topic and ask to move it under topic of that plugin, but… well, I didn’t :man_facepalming: