在线更新成功,但重建失败

遇到了一个有趣的问题,这可能凸显了在线更新和命令行更新之间的另一个区别。

如果我使用带有 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)

宝石是否只在完全构建期间构建?或者是否发生了 Ruby 版本增量,而这只在完全重建时执行?(然后强制重新制作 gem?)

1 个赞

@featheredtoast 知道这是否可能影响了 rmagick gem 吗?:

是否同时升级了 imagemagick 版本?

2 个赞

我们已更新了我们的镜像,因此我们将单独编译 imagemagick 并仅包含最终的 imagemagick 二进制文件,这样我们就不再将 imagemagick 的编译时库包含在镜像中,以减小我们基础镜像的尺寸。

您可以简单地添加一个安装脚本来安装 imagemagick 库,但我建议删除该插件对 rmagick gem 的依赖——我不确定在哪里调用了该 gem,因为它看起来像是扩展了 core Discourse 的优化图像调用,而这直接调用了 imagemagick 二进制文件。

1 个赞

我正在使用它来处理图像。

即使我能找到一个变通方法,阻止使用rmagick gem也将是一种耻辱,因为替代方法是干扰对ImageMagick的系统调用,这有点……笨拙……而且不如使用方便的语言API那样对开发人员友好。

您可以执行诸如引入 gem 的编译时依赖项之类的操作 - 类似于以下内容:

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

我们并没有阻止任何内容的安装,只是不再将 gem 所依赖的静态库包含在基础映像中。

1 个赞

谢谢你,杰夫!!

我将首先看看是否可以消除它,然后再尝试将其作为替代方案。

正确的表单需要 cmd: 等。但抱歉,不行。我无法确认错误是否相同。我使用了 tmux,它不允许我滚动。

1 个赞

要在 tmux 中滚动,请按 control-b,然后按 [(左方括号)。之后您就可以滚动,并按 q 退出滚动模式。

1 个赞

我最终通过切换到相当不友好的命令行 api 来解决了这个问题。:sweat_smile:

该插件不再依赖 rmagick gem。这有点可惜,但迫不得已。

3 个赞