واجهت مشكلة غريبة قد تسلط الضوء على فرق آخر بين التحديثات عبر الإنترنت والتحديثات عبر سطر الأوامر.
إذا قمت بإجراء تحديث عبر الإنترنت مع إضافة تحتوي على 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؟)
لقد قمنا بتحديث صورتنا، لذلك نقوم بتجميع imagemagick بشكل منفصل ونضمن فقط الملف الثنائي النهائي لـ imagemagick، لذلك لم نعد نضمن مكتبات وقت التجميع لـ imagemagick في الصورة في محاولة لتقليل حجم صورنا الأساسية.
يمكنك ببساطة إضافة برنامج نصي للتثبيت لتثبيت مكتبات imagemagick، ولكنني أوصي بإزالة اعتماد المكون الإضافي على gem rmagick - لست متأكدًا من أين يتم استدعاء هذا الـ gem حيث يبدو أنه يوسع استدعاءات تحسين الصور الأساسية لـ Discourse، والتي تستدعي مباشرة الملف الثنائي لـ imagemagick.
حتى لو تمكنت من إيجاد حل بديل، فسيكون من المؤسف حظر استخدام gem rmagick لأن البديل يتضمن التعامل مع استدعاءات النظام لـ ImageMagick، وهو أمر … غير أنيق … وأقل ملاءمة للمطورين مقارنة باستخدام واجهة برمجة تطبيقات ملائمة في اللغة.