La actualización en línea tiene éxito, pero la reconstrucción falla

Me encontré con un problema curioso que podría resaltar otra diferencia entre las actualizaciones en línea y las actualizaciones de línea de comandos.

Si realizo una actualización en línea con un plugin con la gema rmagick, tiene éxito.

Sin embargo, falla con una reconstrucción de CLI con:

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)

¿Las gemas solo se compilan durante una compilación completa? ¿O podría ser que haya habido un incremento en la versión de Ruby que solo se realiza en una reconstrucción completa? (¿lo que luego fuerza una rehacer de la gema?).

1 me gusta

@featheredtoast ¿alguna idea si esto podría haber afectado al gem rmagick?:

¿hubo un aumento simultáneo de la versión de imagemagick?

2 Me gusta

Hemos actualizado nuestra imagen, por lo que estamos compilando imagemagick por separado y solo incluimos el binario final de imagemagick, por lo que ya no incluimos las bibliotecas de tiempo de compilación para imagemagick en la imagen en un esfuerzo por reducir el tamaño de nuestras imágenes base.

Podrías simplemente agregar un script de instalación para instalar las bibliotecas de imagemagick, pero recomendaría eliminar la dependencia del plugin de la gema rmagick; no estoy seguro de dónde se llama esa gema, ya que parece que está extendiendo las llamadas de optimización de imágenes del Discourse principal, que simplemente llama directamente al binario de imagemagick.

1 me gusta

Lo estoy usando para procesar una imagen.

Incluso si logro encontrar una solución alternativa, sería una verdadera lástima bloquear el uso del gem rmagick, ya que la alternativa implica manipular llamadas al sistema a ImageMagick, lo cual es un poco… tosco… y mucho menos amigable para el desarrollador en comparación con el uso de una API conveniente en el lenguaje.

Puedes hacer algo como incorporar las dependencias en tiempo de compilación de la gema, algo como lo siguiente:

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

No estamos bloqueando nada de la instalación, solo ya no incluimos las bibliotecas estáticas de las que depende la gema en la imagen base.

1 me gusta

¡Gracias Jeff!

Primero veré si esto se puede eliminar, luego probaré eso como una alternativa.

El formulario correcto necesita cmd: etc. Pero lo siento, no se puede. No puedo confirmar si el error es el mismo, aunque. Usé tmux y no me permite desplazarse.

1 me gusta

Para desplazarse en tmux, presione Control-b y luego [ (corchete izquierdo). Luego puede desplazarse y usar q para salir del modo de desplazamiento.

1 me gusta

Finalmente resolví esto recurriendo a la API de línea de comandos, que no es muy amigable. :sweat_smile:

El plugin ya no depende de la gema rmagick. Es una lástima, pero no hay más remedio.

3 Me gusta