Discourse 网站图片丢失,但它们存在于上传文件夹中。

我刚刚尝试修改一个旧帖子的标题。随后我意识到,帖子中的所有图片都变成了 transparent.png,导致无法正常显示。

执行 rake uploads:recover 后接着执行 rake posts:rebake 未能解决问题。

我可以通过 https://talk.zabanshenas.com/uploads/default/original/3X/8/7/8726fbef7b69ac8226d28568b46f3e06afe2fb4f.jpeg 访问该图片。

上传本身的格式是:![164389418-how-i-met-your-mother-wallpapers|666x500](upload://jhBYRiSdEO0a8JYypd6XapJbpaD.jpeg)

但是当我执行以下操作时:

Upload.where( "url LIKE '%8726fbef7b69ac8226d28568b46f3e06afe2fb4f%'" )
我得到
=> []

有什么想法吗?

如果我在其他地方重新上传完全相同的图片,旧帖子在重新生成后也会显示该图片。因此,我认为问题出在对部分旧上传文件的索引上。我该如何对所有上传文件重新索引?或者更好的是,仅对缺失的文件进行索引。

更新:

我阅读了一些 rake 任务,发现 rake posts:recover_uploads_from_index 似乎可以解决我的问题。但我遇到了以下错误:

undefined method `split' for nil:NilClass
from /var/www/discourse/app/models/site_setting.rb:151:in `s3_base_url'

我的网站并未启用 S3 上传功能::face_with_monocle: :face_with_monocle:

更新:

我为上述错误做了一个临时的粗糙修复(注释掉这一行)并运行了 rake 任务。但这并非我所预期的:

正在索引中搜索 upload://dC9HyffX3S1XbwwdUOsHe5aMyJX.jpeg (dC9HyffX3S1XbwwdUOsHe5aMyJX)                                                                                                             \n正在跳过 https://talk.zabanshenas.com/t/topic/4430/1 中的 upload://dC9HyffX3S1XbwwdUOsHe5aMyJX.jpeg,因为其文件名似乎过短                                                               \n正在索引中搜索 upload://kWx14u8XkQ8qd6NvOoDLN6usTl8.jpeg (kWx14u8XkQ8qd6NvOoDLN6usTl8)                                                                                                             \n正在跳过 https://talk.zabanshenas.com/t/topic/4430/1 中的 upload://kWx14u8XkQ8qd6NvOoDLN6usTl8.jpeg,因为其文件名似乎过短

我深入研究了 rake uploads:recover 这个 rake 任务。我认为下面这一行可能有问题:

据我理解,这里应该将 uploads/default/original 下的所有文件都添加到 @paths 中。然而,我尝试将 @paths 输出到文件中,结果只列出了 tombstone 文件。

我是不是漏掉了什么?:thinking: @cvx

我觉得应该改成这样:

concat(Dir.glob(File.join(
      Rails.root, "public", Discourse.store.upload_path,
      'original',
      '**',
      '*.*'
    )))