Avatar 上传问题 (Ubuntu)

此内容是从 win 11 wsl 开发环境设置主题中分离出来的。

我的问题与安装在 ubuntu 22.04.3 上的开发环境设置(非 docker)有关

……感谢您的帮助,不过我还是做了一些额外的手动步骤,因为编辑后的安装程序似乎没有安装最新版本的 npm 或 ruby

也正在使用 ubuntu-22.04

使用(选项 2)安装最新 npm:https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-22-04

安装 pnmp: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

完成所有这些之后,我才能登录到实例……

在花了一整天的时间让开发实例运行起来之后,我相当满意……一切似乎都正常,除了上传头像。具体来说,作为用户我可以上传一个头像,并且在头像上传框中它能正确显示,但当我点击保存时,它只显示占位符头像……日志中没有任何错误……

这对我很重要,因为我设置开发实例是为了测试迁移,而其中一项测试就是确保它们能获取头像 :smiley:……所以我想在继续进行测试导入之前确保它们能正常工作。

话题中上传的图片显示正常,没有问题。

有人有什么想法吗?非常感谢任何帮助。

图片网址在本地环境可能会有点棘手。

请确保您使用 FORCE_HOSTNAME=localhost:4200 bin/ember-cli -u 来启动您的本地服务器。

最好使用云端测试实例来模拟您的最终目标……事实上,我建议您最终在云端测试迁移。

1 个赞

试过了,没用。

我花了一整天时间才把这个本地开发环境弄成现在这样,太累了,我真不想承认这一切都是徒劳的 :stuck_out_tongue: 我以为我快成功了!

我本地开发环境的思路是:

在本地运行导入脚本,备份 Discord,一切看起来不错后将其部署到正确的云生产实例……

您可以在浏览器开发者工具中检查头像的网址,可能会发现它们不正确

本地安装对于开发和测试非常有用……只是在处理图像方面并不完美

1 个赞

很可能是 WSL 没有将 127.0.0.1 暴露给 Windows,因此 Windows 浏览器无法获取到。

尝试从 WSL2 内的 Chrome 启动并使用它呢?

我猜想头像正在使用 127.0.0.1 地址显示……

啊,抱歉,我使用的是 Ubuntu,在一个 Ubuntu 虚拟机上。我不是有意要霸占这个 Win 11 帖子的。

1 个赞

以下是确切的行为。

帖子中的图片上传工作正常。

更改您的用户头像在您首次上传图片并仍在选择图片对话框中时似乎有效:

但是当您“保存更改”时,上传的图片不会显示,而是显示默认的图片:

图片已上传,可以通过访问源文件查看:

如果在开发者工具中更改 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/……….etc

感谢任何帮助!

好的,我想我快要弄清楚了,有两个问题,工作正常后会再向您汇报。

好的……

第一个问题——头像路径是 IP 地址 127.0.0.1,而所有其他 URL 都是 localhost——这会有区别吗?我还是修改了它,方法是进入 rails c(因为似乎命令行启动 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 委托(delegates)。卸载了 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 URL 引用而不是检查基本知识感到恼火……但总而言之,在过去的两天里我学到了很多东西,现在它正在工作 :slight_smile: