온라인 업데이트는 성공했지만 재구축이 실패합니다

온라인 업데이트와 커맨드 라인 업데이트 사이의 또 다른 차이를 드러낼 수 있는 흥미로운 문제를 발견했습니다.

rmagick gem 플러그인을 사용하여 온라인 업데이트를 수행하면 성공합니다.

그러나 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)

Gem은 전체 빌드 시에만 빌드되나요? 아니면 전체 재빌드 시에만 수행되는 Ruby 버전 증가가 원인이어서(그로 인해 Gem의 재빌드가 강제되는 것일 수 있습니다) 그런 것일까요?

@featheredtoast 이 문제가 rmagick 지影响到했는지 혹시 아시는 분 있으신가요?

imagemagick 버전이 동시에 업데이트되었나요?

이미지를 업데이트하여 ImageMagick을 별도로 컴파일하고 최종 ImageMagick 바이너리만 포함하도록 했습니다. 이를 통해 ImageMagick의 컴파일 타임 라이브러리를 기본 이미지에서 더 이상 포함하지 않으며, 기본 이미지의 크기를 줄이려는 노력을 기울이고 있습니다.

ImageMagick 라이브러리를 설치하는 설치 스크립트를 단순히 추가하는 방법도 있지만, 플러그인의 rmagick gem 의존성을 제거하는 것을 권장합니다. 해당 gem이 어디서 호출되는지 명확하지 않으며, 코어 Discourse의 이미지 최적화 호출을 확장하는 것으로 보이며, 이는 결국 ImageMagick 바이너리를 직접 호출하는 방식이기 때문입니다.

이미지 처리를 위해 사용하고 있습니다.

워크어라운드를 찾아낼 수 있다 해도, rmagick 지움을 차단하는 것은 정말 아쉬운 일입니다. 대안은 ImageMagick에 대한 시스템 호출을 직접 다루는 방식인데, 이 방식은 다소 … 어색하고 … 언어 내에서 편리한 API를 사용하는 것에 비해 개발자 친화성이 훨씬 떨어지기 때문입니다.

다음과 같이 gem의 컴파일 시간 의존성을 가져오는 방식으로 처리할 수 있습니다:

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

설치를 차단하는 것은 아니며, 이제 기본 이미지에는 gem이 의존하는 정적 라이브러리를 더 이상 포함하지 않습니다.

제프, 고마워!!

일단 이게 제거될 수 있는지 확인해 보고, 그게 안 되면 대안으로 시도해 볼게.

올바른 형식은 cmd: 등이 필요합니다. 하지만 죄송합니다, 불가능합니다. 오류가 동일한지 확인해 드릴 수는 없습니다. tmux를 사용했는데, 스크롤이 되지 않습니다.

tmux에서 스크롤하려면 Ctrl+b을 누른 후 [ (왼쪽 괄호) 키를 누릅니다. 그런 다음 스크롤을 진행할 수 있으며, q 키를 눌러 스크롤 모드를 종료할 수 있습니다.

결국 친근하지 않은 커맨드 라인 API로 전환하면서 이 문제를 해결했습니다. :sweat_smile:

이 플러그인은 더 이상 rmagick 제모에 의존하지 않습니다. 약간 아쉬운 점이지만, 어쩔 수 없는 일이죠.