Онлайн-обновление прошло успешно, но перестроение не удалось

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

Если я выполняю онлайн-обновление с плагином, использующим gem rmagick, оно проходит успешно.

Однако при пересборке через CLI происходит сбой:

ERROR:  Error installing rmagick:
	ERROR: Failed to build gem native extension.

    current directory: /var/www/discourse/plugins/discourse-topic-previews-sidecar/gems/3.3.6/gems/rmagick-6.0.1/ext/RMagick
/usr/local/bin/ruby extconf.rb
checking for brew... no
checking for pacman... no
checking for Ruby version >= 3.0.0... yes
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
	--with-opt-dir
	--without-opt-dir
	--with-opt-include=${opt-dir}/include
	--without-opt-include
	--with-opt-lib=${opt-dir}/lib
	--without-opt-lib
	--with-make-prog
	--without-make-prog
	--srcdir=.
	--curdir
	--ruby=/usr/local/bin/$(RUBY_BASE_NAME)
	--with-pkg-config
	--without-pkg-config
	--with-override-variables
	--without-override-variables
/var/www/discourse/plugins/discourse-topic-previews-sidecar/gems/3.3.6/gems/pkg-config-1.5.6/lib/pkg-config.rb:504:in `parse_pc': .pc doesn't exist: <MagickCore> (PackageConfig::NotFoundError)

Собираются ли gems только при полной сборке? Или возможно, что произошло увеличение версии Ruby, которое выполняется только при полной пересборке? (что затем вынуждает перекомпилировать gem?)

@featheredtoast есть какие-то идеи, могло ли это повлиять на gem rmagick?:

было ли одновременное обновление версии imagemagick?

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

Вы можете просто добавить скрипт установки для подключения библиотек ImageMagick, но я рекомендую удалить зависимость плагина от gem-пакета rmagick. Мне неясно, где именно вызывается этот gem, так как, судя по всему, он расширяет вызовы оптимизации изображений в ядре Discourse, которые напрямую обращаются к бинарному файлу ImageMagick.

Я использую это для обработки изображений.

Даже если я смогу найти обходной путь, будет очень жаль блокировать использование гема rmagick, так как альтернатива — работа с системными вызовами ImageMagick, что немного… громоздко… и гораздо менее удобно для разработчика по сравнению с использованием удобного API на языке программирования.

Вы можете, например, подтянуть зависимости времени компиляции гема — что-то вроде следующего:

hooks:
  after_code:
    - exec: apt-get update && apt-get install -y libmagickwand-dev

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

Спасибо, Джефф!!

Сначала я проверю, можно ли это устранить, а затем попробую это как альтернативу.

Правильная форма требует cmd: и т. д. Но, к сожалению, не получится. Я не могу подтвердить, та же ли это ошибка, хотя. Я использовал tmux, и он не позволяет мне прокручивать.

Чтобы прокрутить tmux, нажмите Ctrl-b, затем [ (открывающая скобка). После этого можно прокручивать содержимое, а для выхода из режима прокрутки нажмите q.

В конечном итоге я решил это, перейдя к довольно неудобному API командной строки. :sweat_smile:

Плагин больше не зависит от gem rmagick. Это немного жаль, но иногда приходится идти на компромиссы.