У меня возникли проблемы с переименованием пользователя обратно в старое имя (я импортировал данные из phpBB и был вынужден переименовать некоторых пользователей, например, Möp в Moep). При попытке переименования пользователя возникает ошибка 500, а при перезагрузке имя пользователя всё равно отображается без умлаута. Есть какие-то идеи? Настройки Unicode включены, умлауты разрешены, а также включена опция «разрешить аватары из внешних систем».
Вам нужно посмотреть логи и проверить, что там есть. Возможно, вы увидите их в /logs, или, возможно, вам придётся проверить /var/discourse/shared/standalone/log/rails/production.log (я думаю, что это log, а не logs).
Ах, спасибо. Я не знал, есть ли вообще логи и где они находятся. Теперь я знаю. ![]()
Нашёл вот это:
Started PUT "/users/moep/preferences/username" for xxxx:c5:9f0d:4c00:xxxx:e179:xxxx:xxxx at 2022-11-23 15:53:52 +0000
Processing by UsersController#username as */*
Parameters: {"new_username"=>"Möp", "username"=>"moep"}
Completed 500 Internal Server Error in 338ms (ActiveRecord: 0.0ms | Allocations: 137204)
Encoding::CompatibilityError (incompatible character encodings: ASCII-8BIT and UTF-8)
app/models/user.rb:1806:in `username_validator'
app/services/username_changer.rb:35:in `change'
app/services/username_changer.rb:13:in `change'
app/controllers/users_controller.rb:202:in `username'
Есть ещё, но я подумал, что этого может быть достаточно. Если нет, я могу предоставить больше.
Кстати, я пробовал более одного имени пользователя и столкнулся с похожими проблемами.
@pfaffman, ты можешь увидеть в моих логах, почему возникает ошибка 500? ![]()
Система не приняла символы в имени пользователя. Не знаю почему.
Я только что протестировал переименование пользователя с “moep” на “Möp”, и это сработало.
- Какую версию Discourse вы используете?
- Это стандартная установка?
- Есть ли перед вашим Discourse какой-либо обратный прокси?
- Какой браузер вы используете?
- Каково значение настройки
allowed_unicode_username_characters? - Работает ли переименование через консоль Rails?
./launcher enter app rails cuser = User.find_by_username("moep") new_username = "Möp" UsernameChanger.change(user, new_username, Discourse.system_user)
Последнюю. На данный момент это должно быть 2.9.0.beta12.
Да. Я просто переименовал контейнер, так как планирую запустить более одного экземпляра Discourse. Но на данный момент работает только один.
Apache 2.4.
Chrome, Brave.
[äöüßÄÖÜẞ].
Это тоже не работает:
=> "Wägi"
[6] pry(main)> UsernameChanger.change(user, new_username, Discourse.system_user)
Encoding::CompatibilityError: несовместимые кодировки символов: ASCII-8BIT и UTF-8
from /var/www/discourse/plugins/discourse-migratepassword/plugin.rb:78:in `+'
Здесь я пытался изменить “Waegi” на “Wägi”.
Что я заметил: я использую новую версию шаблона для контейнера, которая содержит следующую информацию:
env:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
LANGUAGE: en_US.UTF-8
DISCOURSE_DEFAULT_LOCALE: de
В старом шаблоне (примерно 2019 года) было только:
env:
LANG: en_US.UTF-8
DISCOURSE_DEFAULT_LOCALE: de
Может быть, это связано с проблемой? И являются ли эти настройки правильными для установки Discourse с основным языком немецким?
О, и я только что заметил, что ошибка вызывается плагином discourse-migratepassword — именно поэтому я переименовывал пользователей перед импортом всего из phpBB в Discourse.
Было бы полезно отключить discourse-migratepassword, переименовать пользователей, а затем снова включить его? Что ещё обрабатывается discourse-migratepassword, что требует его активности после импорта из phpBB?
Похоже, что плагин discourse-migratepassword несовместим с юзернеймами в кодировке Unicode.
cc @michaeld
Да, отключение плагина должно решить эту проблему для вас.
Он не нужен во время импорта, а только после него, так как позволяет вашим пользователям входить в систему с использованием старого пароля.
Хорошо, спасибо. Значит, я должен отключить его, переименовать пользователей, а затем сразу же снова включить. Ещё раз спасибо! ![]()
Отключение, а затем переименование пользователей сработало. Еще раз спасибо. ![]()
У меня возник вопрос: могут ли пользователи с умлаутами теперь войти со своим старым паролем phpBB, поскольку discourse-migratepassword, похоже, имеет проблему с Unicode?
Я почти уверен, что при первом входе их пароль сохраняется как пароль Discourse, поэтому он вам больше не нужен. Похоже, что все, кто планировал войти с импортированным паролем, уже сделали это.
Мне не удаётся воспроизвести эту проблему. Те же настройки для Unicode и разрешённых символов; я даже создал пользователя с тем же именем и переименовал его в Möp. Должно быть что-то ещё, о чём я не знаю, чтобы эта проблема проявилась?
Странно. У меня возникала эта проблема с каждым именем пользователя, которое я пробовал. В качестве юникод-символов я использовал только немецкие умлауты, такие как ä, ö, ü. Другой пример: Waegi превращался в Wägi.
Эта проблема впервые появилась в скрипте импорта из phpBB3 в Discourse, что заставило меня переименовать всех пользователей с умлаутами в phpBB, а затем перезапустить скрипт импорта. Я определённо хотел, чтобы пользователи в Discourse снова появились с их оригинальными именами.