التحديث عبر الإنترنت ناجح، لكن إعادة البناء فشلت

واجهت مشكلة غريبة قد تسلط الضوء على فرق آخر بين التحديثات عبر الإنترنت والتحديثات عبر سطر الأوامر.

إذا قمت بإجراء تحديث عبر الإنترنت مع إضافة تحتوي على rmagick gem، فإنه ينجح.

ومع ذلك، فإنه يفشل مع إعادة بناء سطر الأوامر باستخدام:

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)

هل يتم بناء الـ gems فقط أثناء عملية بناء كاملة؟ أو يمكن أن يكون هناك زيادة في إصدار Ruby يتم إجراؤها فقط عند إعادة بناء كاملة؟ (والتي تجبر بعد ذلك على إعادة إنشاء الـ gem؟)

إعجاب واحد (1)

@featheredtoast هل لديك فكرة عما إذا كان هذا قد أثر على gem rmagick؟:

هل كان هناك تحديث متزامن لإصدار imagemagick؟

إعجابَين (2)

لقد قمنا بتحديث صورتنا، لذلك نقوم بتجميع imagemagick بشكل منفصل ونضمن فقط الملف الثنائي النهائي لـ imagemagick، لذلك لم نعد نضمن مكتبات وقت التجميع لـ imagemagick في الصورة في محاولة لتقليل حجم صورنا الأساسية.

يمكنك ببساطة إضافة برنامج نصي للتثبيت لتثبيت مكتبات imagemagick، ولكنني أوصي بإزالة اعتماد المكون الإضافي على gem rmagick - لست متأكدًا من أين يتم استدعاء هذا الـ gem حيث يبدو أنه يوسع استدعاءات تحسين الصور الأساسية لـ Discourse، والتي تستدعي مباشرة الملف الثنائي لـ imagemagick.

إعجاب واحد (1)

أنا أستخدمه لمعالجة صورة.

حتى لو تمكنت من إيجاد حل بديل، فسيكون من المؤسف حظر استخدام gem rmagick لأن البديل يتضمن التعامل مع استدعاءات النظام لـ ImageMagick، وهو أمر … غير أنيق … وأقل ملاءمة للمطورين مقارنة باستخدام واجهة برمجة تطبيقات ملائمة في اللغة.

يمكنك سحب تبعيات وقت التصريف الخاصة بالجيم - شيء مثل التالي:

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

نحن لا نمنع أي شيء من التثبيت، نحن فقط لم نعد ندرج المكتبات الثابتة التي تعتمد عليها الجيم في الصورة الأساسية.

إعجاب واحد (1)

شكرا جيف!!

سأرى أولاً ما إذا كان يمكن التخلص من هذا، ثم أجرب ذلك كبديل.

الشكل الصحيح يحتاج cmd: وما إلى ذلك. لكن عذراً، لا يمكنني التأكد مما إذا كان الخطأ هو نفسه، على الرغم من ذلك. لقد استخدمت tmux ولم يسمح لي بالتمرير.

إعجاب واحد (1)

للتحرك في tmux، اضغط على control-b ثم [ (القوس الأيسر). يمكنك بعد ذلك التحرك واستخدام q للخروج من وضع التمرير.

إعجاب واحد (1)

لقد قمت بحل هذا في النهاية بالانتقال إلى واجهة برمجة تطبيقات سطر الأوامر غير الودودة إلى حد ما. :sweat_smile:

لم يعد المكون الإضافي يعتمد على جوهرة rmagick. هذا أمر مؤسف بعض الشيء، ولكن يجب القيام به.

3 إعجابات