Не удалось оптимизировать изображение: неизвестная причина

Всем привет :wave:

Мы только что завершили миграцию одного из наших форумов с одного сервера на другой, одновременно изменив домен.

В новой установке в логах появляется множество таких ошибок:

lib/discourse.rb:810:in `block in warn'
lib/discourse.rb:804:in `each'
lib/discourse.rb:804:in `warn'
/var/www/discourse/app/models/optimized_image.rb:329:in `rescue in convert_with'
/var/www/discourse/app/models/optimized_image.rb:311:in `convert_with'
/var/www/discourse/app/models/optimized_image.rb:305:in `optimize'
/var/www/discourse/app/models/optimized_image.rb:289:in `resize'
/var/www/discourse/app/models/optimized_image.rb:97:in `block in create_for'
/var/www/discourse/app/models/optimized_image.rb:19:in `block in lock'
/var/www/discourse/lib/distributed_mutex.rb:33:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:14:in `synchronize'
/var/www/discourse/app/models/optimized_image.rb:18:in `lock'
/var/www/discourse/app/models/optimized_image.rb:68:in `create_for'
/var/www/discourse/app/models/upload.rb:167:in `rescue in get_optimized_image'
/var/www/discourse/app/models/upload.rb:161:in `get_optimized_image'
/var/www/discourse/app/models/upload.rb:147:in `create_thumbnail!'
/var/www/discourse/lib/cooked_post_processor.rb:281:in `convert_to_link!'
/var/www/discourse/lib/cooked_post_processor.rb:487:in `block in post_process_images'
nokogiri-1.13.3-x86_64-linux/lib/nokogiri/xml/node_set.rb:233:in `block in each'
nokogiri-1.13.3-x86_64-linux/lib/nokogiri/xml/node_set.rb:232:in `upto'
nokogiri-1.13.3-x86_64-linux/lib/nokogiri/xml/node_set.rb:232:in `each'
/var/www/discourse/lib/cooked_post_processor.rb:486:in `post_process_images'
/var/www/discourse/lib/cooked_post_processor.rb:44:in `block in post_process'
/var/www/discourse/lib/distributed_mutex.rb:33:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:14:in `synchronize'
/var/www/discourse/lib/cooked_post_processor.rb:40:in `post_process'
/var/www/discourse/app/jobs/regular/process_post.rb:26:in `block in execute'
/var/www/discourse/lib/distributed_mutex.rb:33:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:14:in `synchronize'
/var/www/discourse/app/jobs/regular/process_post.rb:10:in `execute'
/var/www/discourse/app/jobs/base.rb:232:in `block (2 levels) in perform'
rails_multisite-4.0.0/lib/rails_multisite/connection_management.rb:80:in `with_connection'
/var/www/discourse/app/jobs/base.rb:221:in `block in perform'
/var/www/discourse/app/jobs/base.rb:217:in `each'
/var/www/discourse/app/jobs/base.rb:217:in `perform'
sidekiq-6.4.1/lib/sidekiq/processor.rb:196:in `execute_job'
sidekiq-6.4.1/lib/sidekiq/processor.rb:164:in `block (2 levels) in process'
sidekiq-6.4.1/lib/sidekiq/middleware/chain.rb:138:in `block in invoke'
/var/www/discourse/lib/sidekiq/pausable.rb:138:in `call'
sidekiq-6.4.1/lib/sidekiq/middleware/chain.rb:140:in `block in invoke'
sidekiq-6.4.1/lib/sidekiq/middleware/chain.rb:143:in `invoke'
sidekiq-6.4.1/lib/sidekiq/processor.rb:163:in `block in process'
sidekiq-6.4.1/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'
sidekiq-6.4.1/lib/sidekiq/job_retry.rb:114:in `local'
sidekiq-6.4.1/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'
sidekiq-6.4.1/lib/sidekiq.rb:40:in `block in <module:Sidekiq>'
sidekiq-6.4.1/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'
sidekiq-6.4.1/lib/sidekiq/processor.rb:257:in `stats'
sidekiq-6.4.1/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'
sidekiq-6.4.1/lib/sidekiq/job_logger.rb:13:in `call'
sidekiq-6.4.1/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'
sidekiq-6.4.1/lib/sidekiq/job_retry.rb:81:in `global'
sidekiq-6.4.1/lib/sidekiq/processor.rb:124:in `block in dispatch'
sidekiq-6.4.1/lib/sidekiq/job_logger.rb:39:in `prepare'
sidekiq-6.4.1/lib/sidekiq/processor.rb:123:in `dispatch'
sidekiq-6.4.1/lib/sidekiq/processor.rb:162:in `process'
sidekiq-6.4.1/lib/sidekiq/processor.rb:78:in `process_one'
sidekiq-6.4.1/lib/sidekiq/processor.rb:68:in `run'
sidekiq-6.4.1/lib/sidekiq/util.rb:56:in `watchdog'
sidekiq-6.4.1/lib/sidekiq/util.rb:65:in `block in safe_thread'

Судя по коду, если ошибка не содержит convert: , используется это общее сообщение об ошибке, поэтому фактическая причина ошибки скрывается.

Кажется, что у нас может отсутствовать какая-то необходимая библиотека, либо некоторые файлы не были перенесены во время миграции, но без сообщения об ошибке трудно сказать наверняка. Есть ли у кого-нибудь идеи, с чего мне стоит начать поиск?

Мое предположение: ImageMagick устарел.

Можете подтвердить, что используете нашу официальную сборку? При выполнении команды ./launcher rebuild мы всегда загружаем последнюю версию базового образа.

Привет, Сэм, да, мы используем ./launcher и пересобирали его несколько раз за последнюю неделю.

Есть ли способ быстро добавить патч в этот скрипт, чтобы он выводил фактическую ошибку? Мой Ruby немного заржавел, могу ли я просто отредактировать файл, или тут задействовано кэширование/компиляция?

На самом деле, судя по нашим логам, эта ошибка не появлялась с другого дня. Возможно, это была просто проблема во время нашей миграции :thinking:

Мое предположение заключается в том, что в тот момент файлы для загрузки отсутствовали. Мы пытались оптимизировать изображения и выполнить конвертацию, но файла не было.

Конечно, наше сообщение об ошибке можно улучшить.

Что касается отладки, если это необходимо, я бы отредактировал файл внутри контейнера и добавил несколько вызовов Discourse.warn (это по сути printf для логов). После внесения изменений в файл перезапустите контейнер.