Problema ao carregar avatar (Ubuntu)

Isto foi separado do tópico de configuração do ambiente de desenvolvimento do WSL no win 11.

Meus problemas estão relacionados a uma configuração de desenvolvimento (não-docker) instalada no ubuntu 22.04.3

…Obrigado por isso, tive que fazer algumas etapas manuais extras, pois o instalador editado não pareceu instalar as versões mais recentes do npm ou ruby

Também usando ubuntu-22.04

Instalar o npm mais recente usando (opção 2): https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-22-04

Instalar pnmp: npm install -g pnpm

Instalar o ruby mais recente (método 3): https://ubuntuhandbook.org/index.php/2024/01/install-ruby-ubuntu-24-04/

Adicionar isto ao bash.rc:

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

Instalar o imagemagik manualmente, a versão mais recente (certifique-se de ir para a seção “Install latest version of ImageMagick from the source code (for advanced and desperate users)”: https://itsfoss.com/install-imagemagick-ubuntu

Somente depois de tudo isso consegui fazer login na instância…

Depois de passar o dia inteiro configurando a instância de desenvolvimento, fiquei bem satisfeito… tudo parece estar ok, exceto o upload de avatares. Especificamente, como usuário, consigo fazer o upload de um avatar e ele é exibido corretamente na caixa de upload de avatar, mas quando clico em salvar, ele exibe apenas o avatar de espaço reservado… sem erros no log…

Isso é bem importante para mim, pois configurei a instância de desenvolvimento para testar uma migração e um desses testes é que ela carrega avatares :smiley: … então quero ter certeza de que eles funcionam antes de prosseguir com uma importação de teste.

Imagens carregadas em tópicos aparecem corretamente, sem problemas.

Alguém tem alguma ideia? Qualquer ajuda é muito apreciada.

URLs para imagens podem ser um pouco complicadas localmente.

Certifique-se de iniciar seu servidor local com FORCE_HOSTNAME=localhost:4200 bin/ember-cli -u

É melhor usar uma instância de teste na nuvem para imitar seu destino final… na verdade, eu recomendaria que você testasse as migrações na nuvem, em última análise.

1 curtida

Tentei isso, sem sucesso.

Estou tão cansado depois de passar o dia inteiro fazendo este ambiente de desenvolvimento local chegar onde está, que não consigo me convencer de que tudo foi inútil agora :stuck_out_tongue: achei que estava lá!

Meu processo de pensamento para um ambiente de desenvolvimento local foi:

executar o script de importação localmente, fazer backup do Discord, colocá-lo na instância de produção em nuvem apropriada quando tudo parecer bom…

você pode verificar as URLs dos avatares nas ferramentas de desenvolvedor do navegador e pode descobrir que elas não estão corretas

instalações locais são muito úteis para desenvolvimento e testes… apenas não são perfeitas para manipular imagens

1 curtida

O que provavelmente está acontecendo é que o WSL não está expondo o 127.0.0.1 para o Windows, então um navegador do Windows não o está detectando.

Em vez disso, tente iniciar a partir do Chrome dentro do WSL2 e usar esse?

Minha suposição é que os avatares estão sendo exibidos com um endereço 127.0.0.1…

Ahh desculpe, estou usando o Ubuntu, em uma VM Ubuntu. Não queria sequestrar este tópico do Win 11

1 curtida

Aqui está o comportamento exato.

O upload de imagens em publicações funciona bem.

Mudar o avatar do usuário parece funcionar quando você carrega a imagem pela primeira vez e ainda está na caixa de diálogo de seleção de imagem:

mas quando você clica em ‘Salvar alterações’, a imagem carregada não é exibida e mostra a imagem padrão:

A imagem foi carregada e pode ser visualizada acessando a fonte:

e se você alterar a URL nas ferramentas do desenvolvedor, ela é exibida corretamente na página de preferências:

Então… a diferença é a URL - o avatar personalizado carregado tem um “http://127.0.0.1:4200/uploads/default/original…” mas a página tenta exibir

“/user_avatar/127.0.0.1/user1/…”

…o que estou perdendo aqui?

nota: em tópicos/publicações a imagem é exibida corretamente com a URL: http://localhost:4200/uploads/default/original/……….etc

Qualquer ajuda é apreciada!

Ok, acho que estou chegando ao fundo da questão, dois problemas, reportarei quando estiver funcionando

Ok…

Primeiro problema - o caminho do avatar era o endereço IP 127.0.0.1, enquanto todos os outros URLs eram localhost - isso faria alguma diferença? Eu mudei de qualquer maneira, entrando no rails c (já que não parecia captar os parâmetros da linha de comando para iniciar o discourse (FORCE_HOST=localhost etc.), eles estavam em branco no rails).

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

Então os caminhos dos avatares eram localhost e não endereço IP depois que reiniciei o site. Os avatares ainda não estavam funcionando, no entanto.

Mais investigação dos logs assim que fiz uma importação de avatar:

tail -n 200 log/development.log

revelou:

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"

e depois de alguma pesquisa descobri que era porque eu tinha instalado o imagemagick, mas não os delegados jpeg PRIMEIRO. Desinstalei o Imagemagick, instalei os delegados jpeg (e outros):

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

e então reinstalei o Imagemagick a partir da fonte:

./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

reiniciei o servidor discourse e os avatares funcionaram instantaneamente :slight_smile:

Estou irritado comigo mesmo por ter fixado nas referências de URL ip/localhost em vez de verificar o básico… mas é isso, aprendi bastante nos últimos dois dias e está funcionando agora :slight_smile: