Предпросмотр изображения обрезается

По какой-то причине это происходит только на одном из моих форумов, а не на другом, хотя оба находятся на почти одинаковой версии Discourse.

После последнего обновления при встраивании изображений в сообщения миниатюра в лайтбоксе обрезает края изображения. Из-за этого картинки с текстом становится очень трудно читать.

Мне кажется, что это нежелательное поведение, тем более что здесь, на Meta, такой проблемы нет.

Полное изображение

Привет, @FroggyC :slight_smile:

Скорее всего, это связано с их настройками файлов, такими как:

  • макс. ширина изображения: Максимальная ширина миниатюры изображения в сообщении. Изображения с большей шириной будут изменены в размере и открыты в лайтбоксе.

  • макс. высота изображения: Максимальная высота миниатюры изображения в сообщении. Изображения с большей высотой будут изменены в размере и открыты в лайтбоксе.

  • мин. соотношение для обрезки: Соотношение, используемое для обрезки высоких изображений. Введите результат деления ширины на высоту.


Возможно, я прочитал немного слишком быстро.

Появлялось ли изображение корректно до обновления?

Если щёлкнуть правой кнопкой мыши → Открыть изображение в новой вкладке, отобразится ли изображение полностью?

Какие настройки в разделе Настройки → Файлы отличаются от значений по умолчанию?

Все эти настройки установлены по умолчанию.

Изображение не обрезается при открытии.


Я пробовал восстановить резервную копию сайта на новом экземпляре, но это также не решило проблему. Очевидно, что дело в конфигурации, хотя честно говоря, я не знаю в чём именно.

У кого-нибудь есть решение этой проблемы? Я уже в отчаянии из-за этой ситуации.

Попробуйте открыть сайт в безопасном режиме, чтобы проверить, поможет ли это.

Если изображение опубликовано в публичном посте, поделитесь здесь ссылкой на него. Возможно, кто-то сможет разобраться, в чём проблема.

Привет :waving_hand:

Я проверил сайт, и, похоже, нет никаких пользовательских CSS-стилей или других настроек, влияющих на миниатюры.

Скорее всего, это ошибка в настройках сайта, например:

Но вы сказали:

Кстати, какое значение по умолчанию у вашей настройки «минимальное соотношение для обрезки»?


Возможно, это ошибка в конфигурации CDN? Если вы используете облачный ресайзер изображений для оптимизации изображений (миниатюр). Это маловероятно, но всё же может быть причиной.


Другая возможная причина — плагин, который работает с миниатюрами. Как предложил Саймон, вы также можете попробовать загрузить новые изображения в безопасном режиме, чтобы проверить, не вызвано ли это плагином. (Но, насколько я вижу, вы не используете таких плагинов.) Если я ошибаюсь и вы используете подобный плагин, иногда простого отключения плагина в панели администратора недостаточно. В этом случае нужно закомментировать (удалить) его из файла app.yml и попробовать снова.

Однако обратите внимание: эти миниатюры создаются в указанных размерах и обрезаются в постах. Поэтому, если вы что-то измените, это не повлияет на существующие миниатюры, пока вы не пересоберёте посты или не измените их размеры вручную, чтобы система восприняла их как новые файлы и сгенерировала для них новые миниатюры. При новых загрузках изменения должны отобразиться после перезагрузки страницы.

Заходил на сайт в безопасном режиме, и проблема сохраняется.

Я также попробовал восстановить сайт на другом сервере с установкой Discourse, используя тот же app.yml, и затем пересобрал посты, просто чтобы проверить, изменится ли что-то, но ничего не изменилось.

0.22, и оно точно такое же на другом форуме, которым я управляю, где этой проблемы нет.

Мой CDN — это базовый от Amazon AWS, и он настроен так же, как на другом сайте, где этой проблемы нет.

К сожалению, я не использую никаких плагинов, которые взаимодействовали бы с этим. Возможно, discourse-topic-previews-sidecar?

Я проверил содержимое своего ведра AWS S3, и похоже, что обрезалась оптимизированная версия изображений. Значит, это какой-то баг, возникающий при загрузке изображений.

Попробуйте следующее:

  1. Небольшое изменение оригинального изображения (чтобы Discourse не распознал его как существующее, хотя я не уверен, что это так, если вы вставляете его из буфера обмена),
  2. Перейдите в безопасный режим, где всё отключено,
  3. Создайте пост,
  4. Вставьте/загрузите изображение,
  5. Проверьте, обрезается ли превью или результат?

:thinking:

Это тот случай, когда все стараются найти проблему, а в итоге все скажут: «Это же было так очевидно», верно?

season 3 facepalm GIF

Я видел, как вы писали, пока я публиковал последнее обновление. Учитывая мои находки в AWS-бакете, эти шаги всё ещё актуальны?

Да, повторная загрузка изображения в безопасном режиме (я сделал его скриншот, поэтому оно немного отличается) решает проблему.

Значит ли это, что причина в плагине?

Полагаю, что у плагина sidecar есть некоторые экспериментальные функции.

Можете ли вы отключить эту настройку?

Не то самое, но у меня была включена настройка, расположенная прямо под ней.

Отключение, похоже, решило проблему (по крайней мере, для новых изображений).

Есть ли сейчас способ пересоздать все оптимизированные версии, чтобы исправить проблему на всём сайте?

Я вижу, что есть rake-задача uploads:regenerate_missing_optimized, но, насколько я понимаю, она пересоздаст только отсутствующие оптимизированные версии.

cd /var/discourse
./launcher enter app
rake posts:rebake

Я думал, что это просто переворачивает HTML поста из markdown. В любом случае, я попробую.

Да, но, думаю, оно должно перегенерироваться, так как ваши настройки изменились.

К сожалению, повторная сборка поста не сгенерировала оптимизированные версии.

Мне хочется переместить папку optimized/ в моём бакете и выполнить команду rake uploads:regenerate_missing_optimized. Посмотрим, сломаю ли я что-нибудь.

Редактирование: Ах, но эта задача работает только для внутреннего хранилища. Не для S3.

В итоге проблемных изображений оказалось так немного, что я в итоге вручную перезагрузил все их. Так что проблема решена, хотя и не самым эффективным способом.