Проблема с загрузкой аватара (Ubuntu)

Это сообщение было выделено из темы по настройке среды разработки WSL в Windows 11.

Мои проблемы касаются настройки разработки (без Docker), установленной на Ubuntu 22.04.3

…Спасибо за это, однако мне пришлось выполнить дополнительные ручные шаги, так как отредактированный установщик, похоже, не установил последние версии npm и Ruby.

Также используется ubuntu-22.04.

Установите последнюю версию npm (вариант 2): https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-22-04

Установите pnpm: npm install -g pnpm

Установите последнюю версию Ruby (метод 3): https://ubuntuhandbook.org/index.php/2024/01/install-ruby-ubuntu-24-04/

Добавьте следующее в файл bash.rc:

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

Установите ImageMagick вручную в последней версии (убедитесь, что вы перешли в раздел «Установка последней версии ImageMagick из исходного кода (для продвинутых и отчаявшихся пользователей)»): https://itsfoss.com/install-imagemagick-ubuntu

Только после выполнения всех этих шагов мне удалось войти в экземпляр….

Итак, после целого дня настройки dev-окружения я был довольно доволен… всё выглядит нормально, кроме загрузки аватаров. Конкретно: как пользователь я могу загрузить аватар, и в поле загрузки аватара он отображается корректно, но при нажатии «Сохранить» показывается только аватар-заглушка… ошибок в логе нет…

Это для меня довольно важно, так как я настроил dev-окружение для тестирования миграции, и один из тестов — проверка того, что аватары корректно переносятся :smiley: … поэтому я хочу убедиться, что они работают, прежде чем приступать к тестовому импорту.

Загруженные изображения в темах отображаются корректно, проблем нет.

Есть ли у кого-нибудь идеи? Любая помощь будет очень кстати.

URL-адреса для изображений могут быть немного сложными в локальной среде.

Убедитесь, что вы запускаете локальный сервер с помощью команды FORCE_HOSTNAME=localhost:4200 bin/ember-cli -u.

Лучше использовать тестовый экземпляр в облаке, чтобы имитировать ваше конечное место назначения… на самом деле, я бы рекомендовал в итоге тестировать миграции в облаке.

Попробовал, но безрезультатно.

Я так устал после целого дня настройки этой локальной среды разработки, что не могу заставить себя думать, что всё было зря :stuck_out_tongue: думал, что уже почти готов!

Мой план для локальной среды разработки был таким:

запустить скрипт импорта локально, сделать резервную копию Discord, а когда всё будет выглядеть хорошо — перенести это на продакшн-инстанс в облако…

Вы можете проверить URL-адреса аватаров в инструментах разработчика браузера и, возможно, обнаружите, что они указаны неверно.

Локальные установки очень полезны для разработки и тестирования… просто не идеальны для манипуляций с изображениями.

Скорее всего, проблема в том, что WSL не делает адрес 127.0.0.1 доступным для Windows, поэтому браузер в Windows не может его обнаружить.

Попробуйте вместо этого запустить Chrome внутри WSL2 и использовать его?

Мне кажется, аватары отображаются с использованием адреса 127.0.0.1…

Ах, извините, я использую Ubuntu на виртуальной машине с Ubuntu. Не хотел захватывать эту тему про Windows 11.

Вот точное поведение.

Загрузка изображений в постах работает нормально.

Смена аватара пользователя, похоже, работает при первой загрузке изображения, пока вы ещё в диалоге выбора картинки:

но при нажатии «Сохранить изменения» загруженное изображение не отображается и показывается изображение по умолчанию:

Изображение действительно загрузилось, и его можно увидеть, перейдя по прямой ссылке:

Если изменить URL в инструментах разработчика, он корректно отображается на странице настроек:

Итак… разница в URL: у загруженного кастомного аватара ссылка вида «http://127.0.0.1:4200/uploads/default/original…..», а страница пытается отобразить

«/user_avatar/127.0.0.1/user1/…….»

….что я упускаю?

Примечание: в темах/постах изображение отображается корректно с URL: http://localhost:4200/uploads/default/original/……….и т.д.

Буду признателен за любую помощь!

Кажется, я понял, в чём дело. Две проблемы. Сообщу, когда всё заработает.

Хорошо…

Первая проблема — путь к аватару указывал на IP-адрес 127.0.0.1, тогда как все остальные URL использовали localhost. Имело ли это значение? Я всё равно исправил это, зайдя в консоль Rails (так как параметры, переданные в командной строке при запуске Discourse (FORCE_HOST=localhost и т. д.), не подхватывались, и в Rails они были пустыми).

rails c
SiteSetting.force_hostname = "localhost"
SiteSetting.port = 4200
exit

После перезапуска сайта пути к аватарам стали указывать на localhost, а не на IP-адрес. Однако аватары всё ещё не работали.

Дальнейшее изучение логов сразу после импорта аватара:

tail -n 200 log/development.log

показало:

convert: no decode delegate for this image format jpeg:/home/bob/discourse/public/uploads/default/original/1X/92bb0d46e6a4b8a1333505b9d2da59a5ed1721ec.jpeg[0]' @ error/constitute.c/ReadImage/752.\nconvert: no images defined jpeg:/tmp/discourse-thumbnail20260202-4096-qjyo93.jpeg' @ error/deprecate.c/ConvertImageCommand/3368.\n">

После некоторого поиска я выяснил, что причина была в том, что я установил ImageMagick, но не установил сначала библиотеки-обёртки для JPEG. Я удалил ImageMagick, установил библиотеки для JPEG (и другие):

sudo apt install -y libpng-dev libtiff-dev libwebp-dev libheif-dev liblcms2-dev zlib1g-dev libjpeg-turbo8 libjpeg-turbo8-dev

а затем переустановил ImageMagick из исходного кода:

./configure \
  --prefix=/usr/local \
  --with-modules \
  --disable-static \
  --with-quantum-depth=16 \
  --with-jpeg=yes \
  --with-png=yes \
  --with-tiff=yes \
  --with-webp=yes \
  --with-heic=yes \
  --with-lcms=yes

make -j"$(nproc)"
sudo make install
sudo ldconfig

Перезапустил сервер Discourse, и аватары сразу заработали :slight_smile:

Я сам на себя зол за то, что зациклился на ссылках с IP/localhost, вместо того чтобы проверить основы… но в итоге я многому научился за последние пару дней, и теперь всё работает :slight_smile: