オンラインアップデートは成功したが、リビルドは失敗した。

オンラインアップデートとコマンドラインアップデートの違いを示す可能性のある興味深い問題を見つけました。

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 の再作成が強制されますか?)

「いいね!」 1

@featheredtoast、これがrmagick gemに影響を与えた可能性があるか、何か分かりますか?:

同時にimagemagickのバージョンアップはありましたか?

「いいね!」 2

ベースイメージのサイズを削減するため、イメージを更新し、imagemagick を個別にコンパイルして最終的な imagemagick バイナリのみを含めるようにしました。そのため、イメージに imagemagick のコンパイル時ライブラリを含めるのはやめました。

インストール スクリプトを追加して imagemagick ライブラリをインストールすることもできますが、rmagick gem へのプラグインの依存関係を削除することをお勧めします。この gem がどこで呼び出されているのかはよくわかりません。これは、Discourse のコアである最適化イメージ呼び出しを拡張しているように見え、imagemagick バイナリを直接呼び出しています。

「いいね!」 1

画像を処理するために使用しています。

回避策を見つけられたとしても、代替手段がImageMagickへのシステムコールをいじることであるため、rmagick gemの使用をブロックするのは残念なことです。これは少し…ぎこちなく…、便利なAPIを言語で使用するのと比べて、開発者にとってずっとフレンドリーではありません。

次のような、gem のコンパイル時依存関係をプルできます。

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

インストールをブロックしているわけではなく、gem が依存している静的ライブラリをベースイメージに含めなくなっただけです。

「いいね!」 1

ジェフ、ありがとう!

まず、これを排除できるかどうかを確認してから、それを代替案として試してみます。

正しい形式には cmd: などが必要です。しかし、残念ながらできません。エラーが同じかどうかは確認できません。tmux を使用しましたが、スクロールできませんでした。

「いいね!」 1

tmuxでスクロールするには、Ctrl-b の後に [ (左角括弧)を押します。その後スクロールでき、スクロールモードを終了するには q を押します。

「いいね!」 1

最終的に、あまり親切とは言えないコマンドラインAPIに移行することで解決しました。:sweat_smile:

プラグインはもはやrmagick gemに依存しなくなりました。それは少し残念ですが、必要は万物に適うです。

「いいね!」 3