Online-Update erfolgreich, aber Neuerstellung schlägt fehl

Auf ein merkwürdiges Problem gestoßen, das möglicherweise einen weiteren Unterschied zwischen Online-Updates und Befehlszeilen-Updates hervorhebt.

Wenn ich ein Online-Update mit einem Plugin mit dem rmagick gem durchführe, ist es erfolgreich.

Es schlägt jedoch mit einem CLI-Rebuild fehl mit:

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)

Werden Gems nur während eines vollständigen Builds erstellt? Oder könnte es sein, dass eine Ruby-Versionserhöhung stattgefunden hat, die nur bei einem vollständigen Rebuild durchgeführt wird? (was dann eine Neuerstellung des Gems erzwingt?)

@featheredtoast irgendeine Idee, ob dies den rmagick gem beeinträchtigt haben könnte?:

gab es gleichzeitig ein imagemagick version bump?

Wir haben unser Image aktualisiert, daher kompilieren wir ImageMagick separat und binden nur die endgültige ImageMagick-Binärdatei ein. Wir binden daher keine Compile-Zeit-Bibliotheken für ImageMagick mehr in das Image ein, um die Größe unserer Basis-Images zu reduzieren.

Sie könnten einfach ein Installationsskript hinzufügen, um die ImageMagick-Bibliotheken zu installieren, aber ich würde empfehlen, die Abhängigkeit des Plugins von der rmagick-Gem zu entfernen – ich bin mir nicht sicher, wo diese Gem aufgerufen wird, da sie die Kernaufrufe zur Bildoptimierung von Discourse zu erweitern scheint, die direkt die ImageMagick-Binärdatei aufrufen.

Ich verwende es zur Bildverarbeitung.

Selbst wenn ich eine Umgehung finden könnte, wäre es wirklich schade, die Verwendung des rmagick-Gems zu blockieren, da die Alternative darin besteht, mit Systemaufrufen an ImageMagick herumzuhantieren, was etwas … sperrig … und viel weniger entwicklerfreundlich ist, im Gegensatz zur Verwendung einer praktischen API in der Sprache.

Sie können beispielsweise die Compile-Zeit-Abhängigkeiten des Gems einbinden – so etwas wie das Folgende:

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

Wir blockieren die Installation von nichts, wir nehmen nur die statischen Bibliotheken, von denen das Gem abhängt, nicht mehr in das Basis-Image auf.

Danke Jeff!!

Ich werde zuerst sehen, ob dies eliminiert werden kann, und dann das als Alternative versuchen.

Das richtige Formular benötigt cmd: usw. Aber leider geht das nicht. Ich kann nicht bestätigen, ob der Fehler derselbe ist. Ich habe tmux benutzt und es erlaubt mir kein Scrollen.

Um in tmux zu scrollen, drücken Sie Strg+b und dann [ (linke Klammer). Sie können dann scrollen und q drücken, um den Scrollmodus zu verlassen.

Ich habe dies letztendlich gelöst, indem ich zur eher unfreundlichen Kommandozeilen-API gewechselt bin. :sweat_smile:

Das Plugin ist nicht mehr auf das rmagick-Gem angewiesen. Das ist ein bisschen schade, aber Not macht erfinderisch.