`uploads:regenerate_missing_optimized` 无法生成缺失的优化图像

rake uploads:missing 发现 225 个缺失的优化图片,它们的名称均为 *10x10.png

尝试使用 rake uploads:regenerate_missing_optimized 重新生成缺失文件时,错误日志中出现了 225 个错误,类型分别为:‘convert: improper image header’ 和 ‘convert: no images defined’。版本 2.4.0.beta10 (c5e3faac00)

hostname	discourse-app
process_id	9853
application_version	6455c6ee872109fc3da9a2b45f6b7466bb96c123
location	/var/www/discourse/public/uploads/default/optimized/2X/9/97f2e2dfda850e56bf8ef65cfc7ee2c885285b4b_2_10x10.png
error_message	lib/discourse.rb:57:in `exec': convert: improper image header `/var/www/discourse/public/uploads/default/original/2X/9/97f2e2dfda850e56bf8ef65cfc7ee2c885285b4b.jpg' @ error/png.c/ReadPNGImage/4294. convert: no images defined `png:/var/www/discourse/public/uploads/default/optimized/2X/9/97f2e2dfda850e56bf8ef65cfc7ee2c885285b4b_2_10x10.png' @ error/convert.c/ConvertImageCommand/3273.
time	7:22 am

日志中的回溯信息:

lib/discourse.rb:644:in `block in warn'
lib/discourse.rb:638:in `each'
lib/discourse.rb:638:in `warn'
/var/www/discourse/app/models/optimized_image.rb:350:in `rescue in convert_with'
/var/www/discourse/app/models/optimized_image.rb:332:in `convert_with'
/var/www/discourse/app/models/optimized_image.rb:327:in `optimize'
/var/www/discourse/app/models/optimized_image.rb:307:in `resize'
/var/www/discourse/lib/tasks/uploads.rake:467:in `block (2 levels) in regenerate_missing_optimized'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.1/lib/active_record/relation/batches.rb:70:in `block (2 levels) in find_each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.1/lib/active_record/relation/batches.rb:70:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.1/lib/active_record/relation/batches.rb:70:in `block in find_each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.1/lib/active_record/relation/batches.rb:136:in `block in find_in_batches'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.1/lib/active_record/relation/batches.rb:238:in `block in in_batches'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.1/lib/active_record/relation/batches.rb:222:in `loop'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.1/lib/active_record/relation/batches.rb:222:in `in_batches'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.1/lib/active_record/relation/batches.rb:135:in `find_in_batches'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.1/lib/active_record/relation/batches.rb:69:in `find_each'
/var/www/discourse/lib/tasks/uploads.rake:436:in `block in regenerate_missing_optimized'
/var/www/discourse/lib/tasks/uploads.rake:435:in `each'
/var/www/discourse/lib/tasks/uploads.rake:435:in `regenerate_missing_optimized'
/var/www/discourse/lib/tasks/uploads.rake:406:in `block (2 levels) in <top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rails_multisite-2.0.7/lib/rails_multisite/connection_management.rb:63:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rails_multisite-2.0.7/lib/rails_multisite/connection_management.rb:73:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:406:in `block in <top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `block in execute'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `execute'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:188:in `invoke'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:160:in `invoke_task'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `block (2 levels) in top_level'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `block in top_level'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:125:in `run_with_threads'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:110:in `top_level'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:83:in `block in run'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:186:in `standard_exception_handling'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:80:in `run'
bin/rake:13:in `<top (required)>'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/cli/exec.rb:63:in `load'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/cli/exec.rb:63:in `kernel_load'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/cli/exec.rb:28:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/cli.rb:476:in `exec'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/vendor/thor/lib/thor.rb:399:in `dispatch'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/cli.rb:30:in `dispatch'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/vendor/thor/lib/thor/base.rb:476:in `start'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/cli.rb:24:in `start'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/exe/bundle:46:in `block in <top (required)>'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/lib/bundler/friendly_errors.rb:123:in `with_friendly_errors'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.1/exe/bundle:34:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'

以下是磁盘上的文件(以其中一张图片为例)——注意那个 0 KB 的 10x10 png 文件:

优化后的文件(shared/standalone/uploads/default/optimized/2X/9/):

97f2e2dfda850e56bf8ef65cfc7ee2c885285b4b_2_690x517.jpeg 172 KB
97f2e2dfda850e56bf8ef65cfc7ee2c885285b4b_2_667x500.jpeg 163 KB
97f2e2dfda850e56bf8ef65cfc7ee2c885285b4b_2_10x10.png      0 KB

原始文件(shared/standalone/uploads/default/original/2X/9/):

97f2e2dfda850e56bf8ef65cfc7ee2c885285b4b.jpg   94 KB

好的,那么问题出在哪里?直接忽略那些格式错误的图片,继续操作吧。

(或者把它们从它们所在的帖子中编辑掉?)

1 个赞

这些图片并非格式错误,它们在帖子中显示正常。

格式有问题(或者更准确地说,是未生成)的是“快速滚动”的优化图片,它无法从原始图片生成。

在快速滚动浏览帖子时,可以检测到该图片缺失。

我已修改标题以提高清晰度。

2 个赞

你好,@md-misko
你的问题解决了吗?
我也遇到了类似的问题。

我之后已迁移到 S3,无法再对 S3 运行 rake uploads:missing 命令,但我已检查上述引用的那个文件,它在 S3 上的大小现在不为 0,所以看来这个问题已经修复了。

你使用的是最新版本吗?

2 个赞

哦!我不知道这个命令不适用于 S3 存储桶。

是的。我总是会升级到最新版本。最多可能滞后 2-3 天。

无论如何,如果你恰好知道,查找缺失上传图像的最佳命令是什么?或者,如果路径因某种原因损坏,将帖子 URL 映射到正确存储桶中正确图像的命令是什么?

这似乎与原始帖子中描述的问题无关。或许您可以在 Support 中开启一个新主题,并详细描述您遇到的具体问题。

1 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.