Шаблон имени пользователя не найден

Здравствуйте,

У меня странная проблема с именем пользователя. Мой форум использует RTL и уникальный язык для арабских ключевых слов.

Имя пользователя установлено на английском языке, но при проверке логов система показывает, что шаблон профиля пользователя не найден… Потому что в логах используются арабские ключевые слова.

Когда я проверяю имя пользователя, чтобы изменить его, оно отображается на английском, но в ошибке показывается арабское ключевое слово.

Вот полная ошибка.

Сообщение

ActionView::Template::Error (No route matches {:action=>"show", :controller=>"users", :username=>"دعم_المجتمع"}, possible unmatched constraints: [:username]
Did you mean?  user_url
               users_url
               users_path
               user_badge_url)
app/views/about/index.html.erb:17
app/views/about/index.html.erb:15
app/controllers/about_controller.rb:16:in `block (2 levels) in index'
app/controllers/about_controller.rb:14:in `index'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:354:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:198:in `call'

Backtrace

actionpack (6.1.4.1) lib/action_dispatch/journey/formatter.rb:44:in `path'
actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:823:in `url_for'
actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:270:in `call'
actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:326:in `block in define_url_helper'
app/views/about/index.html.erb:17
activerecord (6.1.4.1) lib/active_record/relation/delegation.rb:88:in `each'
activerecord (6.1.4.1) lib/active_record/relation/delegation.rb:88:in `each'
app/views/about/index.html.erb:15
actionview (6.1.4.1) lib/action_view/base.rb:247:in `public_send'
actionview (6.1.4.1) lib/action_view/base.rb:247:in `_run'

Env

HTTP HOSTS: forum.com

Я считаю, что нам нужно исправить это внутри контейнера, так как в панели администратора я перепробовал всё, но ничего не работает.

Есть какие-либо предложения?

Есть какие-то предложения, как применить уникальные аватары в Discourse? Чтобы можно было использовать имена пользователей на арабском языке или с уникальным кодированием UTF-8?

Боюсь, у меня нет опыта работы с арабскими именами пользователей, но это тот случай, когда юникодные имена пользователей могли бы помочь?

Верно, проверка уже выполнена, но проблема сохраняется; однако теперь ошибка изменилась:

Сообщение

NoMethodError (неопределённый метод `url' для nil:NilClass)
app/models/badge.rb:306:in `image_url'
(eval):10:in `_fast_attributes'
lib/freedom_patches/ams_include_without_root.rb:54:in `include!'
lib/freedom_patches/ams_include_without_root.rb:54:in `include!'
app/controllers/application_controller.rb:510:in `render_json_dump'
app/controllers/users_controller.rb:97:in `block (2 уровня) in show'
app/controllers/users_controller.rb:89:in `show'
app/controllers/users_controller.rb:103:in `show_card'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:356:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:198:in `call'

Трассировка

app/models/badge.rb:306:in `image_url'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:99:in `block in attribute'
(eval):10:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:448:in `block in merge_association'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:445:in `each'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:445:in `merge_association'

Окружение

HTTP HOSTS: site.com

Похоже, проблема в разделе значков на моём форуме. Я пытаюсь выполнить эту команду в контейнере, но не знаю как:

Discourse.system_user.create_user_profile

Эта команда должна исправить проблему со значками, но я буду благодарен, если кто-то подскажет, как и где её выполнить?

[1] pry(main)> Discourse.system_user.create_user_profile
ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint "user_profiles_pkey"
DETAIL:  Key (user_id)=(-1) already exists.

from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/patches/db/pg.rb:69:in `exec_params'
Caused by PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint "user_profiles_pkey"
DETAIL:  Key (user_id)=(-1) already exists.

from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/patches/db/pg.rb:69:in `exec_params'

Спасибо.

Почему вы так считаете? Мне кажется, что метод create_user_profile не предназначен для ручного запуска; он выполняется системой Discourse автоматически после создания пользователя discourse/app/models/user.rb at main · discourse/discourse · GitHub. Именно поэтому вы получаете ошибку duplicate key value, так как пытаетесь создать профили пользователей, которые уже существуют.

Я попытался воспроизвести эту ошибку, создав учётную запись с именем пользователя دعم_المجتمع, а также протестировал это с учётной записью на английском языке. В обоих случаях язык интерфейса был установлен на арабский, и всё работало корректно.

Мне кажется, что эта проблема больше не связана с языком или шаблонами, а касается отсутствующих изображений бейджей, как вы и указали здесь Badge image missing issue

Вы правы; в любом случае это резервная копия, и я восстановил её, и она работает нормально. Проблема только с изображениями значков. Я попробовал выполнить команду

rake uploads:clean_up
rake posts:rebake

но проблема осталась.

[2] pry(main)> Discourse.system_user.create_user_profile
ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint "user_profiles_pkey"
DETAIL:  Key (user_id)=(-1) already exists.

from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/patches/db/pg.rb:69:in `exec_params'
Caused by PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint "user_profiles_pkey"
DETAIL:  Key (user_id)=(-1) already exists.

from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/patches/db/pg.rb:69:in `exec_params'
[3] pry(main)>