مكون تخزين Azure Blob

لقد قمت بتثبيته بالأمس. ما زلت أختبره، لكنه يبدو عمومًا وظيفيًا.

مرحبًا

أحاول استخدام إضافتكم… بعض الميزات تعمل بشكل صحيح. على سبيل المثال، يمكنني إضافة شعار موقعي الإلكتروني، وينتقل إلى تخزين Azure Blob الخاص بي.

لكن

عند رفع صورة في المنشور، لا تظهر الصورة. لدي هذا:

اقتباس ![quete-viking-coin-master|362x500](upload://tBpGuefbyQNcVbDgJzOyv32uxFX.jpeg)

هل لديكم فكرة؟ هل تعمل إضافتكم بشكل صحيح دائمًا؟

شكرًا على الرد

لقد جربت للتو تثبيت هذه الإضافة على الإصدار v2.7.0 beta1 وحصلت على هذه الرسالة، والتي تبدو مشابهة لمشكلة faraday المذكورة أعلاه ولكن مع nokogiri:

I, [2021-01-13T22:25:07.678431 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle     exec rake db:migrate'
rake aborted!
Gem::ConflictError: Unable to activate azure-storage-common-2.0.1, because nokogiri-1.11.1-x86_64-linux conflicts with nokogiri (~> 1.10.4)
/var/www/discourse/lib/plugin_gem.rb:22:in `load'
/var/www/discourse/lib/plugin/instance.rb:705:in `gem'
/var/www/discourse/plugins/discourse-azure-blob-storage/plugin.rb:12:in `activate!'
/var/www/discourse/lib/plugin/instance.rb:611:in `instance_eval'
/var/www/discourse/lib/plugin/instance.rb:611:in `activate!'
lib/discourse.rb:228:in `block in activate_plugins!'
lib/discourse.rb:225:in `each'
lib/discourse.rb:225:in `activate_plugins!'
/var/www/discourse/config/application.rb:305:in `block in <class:Application>'
/var/www/discourse/lib/plugin_initialization_guard.rb:5:in `plugin_initialization_guard'
/var/www/discourse/config/application.rb:304:in `<class:Application>'
/var/www/discourse/config/application.rb:71:in `<module:Discourse>'
/var/www/discourse/config/application.rb:70:in `<top (required)>'
/var/www/discourse/Rakefile:7:in `require'
/var/www/discourse/Rakefile:7:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'

تعديل: يعمل بشكل صحيح مع الإصدار: d6121249d3856a40382637ed12db50fc43c1fb1d (2.6.0)

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

أيضًا، أواجه هذا الخطأ بعد الترقية إلى الإصدار v2.7.0beta1. هل يمكن تحديث هذا الإضافة لتعمل على أحدث إصدار؟

I, [2021-01-19T19:52:36.859512 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake plugin:pull_compatible_all'
rake aborted!
Gem::ConflictError: Unable to activate azure-storage-common-2.0.1, because nokogiri-1.11.1-x86_64-linux conflicts with nokogiri (~> 1.10.4)
/var/www/discourse/lib/plugin_gem.rb:22:in `load'
/var/www/discourse/lib/plugin/instance.rb:705:in `gem'
/var/www/discourse/plugins/discourse-azure-blob-storage/plugin.rb:12:in `activate!'
/var/www/discourse/lib/plugin/instance.rb:611:in `instance_eval'
/var/www/discourse/lib/plugin/instance.rb:611:in `activate!'
lib/discourse.rb:228:in `block in activate_plugins!'
lib/discourse.rb:225:in `each'
lib/discourse.rb:225:in `activate_plugins!'
/var/www/discourse/config/application.rb:305:in `block in <class:Application>'
/var/www/discourse/lib/plugin_initialization_guard.rb:5:in `plugin_initialization_guard'
/var/www/discourse/config/application.rb:304:in `<class:Application>'
/var/www/discourse/config/application.rb:71:in `<module:Discourse>'
/var/www/discourse/config/application.rb:70:in `<top (required)>'
/var/www/discourse/Rakefile:7:in `require'
/var/www/discourse/Rakefile:7:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'

تم تصنيفها ضمن فئة #plugin:broken-plugin، لذا فهي لا تعمل في الوقت الحالي، ويبدو أنه لا يوجد أحد مهتم بإعادتها إلى حالة عملها.

إعجابَين (2)

هذه قصة محزنة. :frowning:

حصلت هذه الرسالة عن الخطأ فقط عندما حاولت إعادة البناء اليوم.

بشكل أساسي، يحتاج حزمة azure-storage-common إلى ترقية الإصدار لأن أحد اعتماداتها يتعارض الآن مع Discourse.

بالنسبة لمن لا يستطيعون الانتظار (أتفهم شعورك لأنه إذا توقف Azure Blob فجأة عن العمل، فلن يعود موقعك إلى العمل أو قد يفقد كل محتوياته)، قم بسحب الكود من شاغلي الخاص بدلاً من ذلك:

لا أراقب منصة meta بنفس القدر الذي كنت أفعله سابقًا، لذا قد لا أرى هذه الرسائل إلا بعد أشهر. بالنسبة لمن هم في حاجة، قم برفع مشكلة في مستودع GitHub الخاص بي وسأرد.

إعجابَين (2)

نأمل أن يتم دمج طلب السحب قريبًا، ويمكن إزالة علامة broken-plugin.

عند حدوث ذلك، تكون الأخطاء عادةً أثناء المعالجة اللاحقة.

تحقق من سجلات sidekiq لمعرفة ما الذي يمنعك من التحميل إلى Azure.

حصلت على خطأ Unicorn اليوم عند إعادة بناء تطبيقي:

E, [2021-03-29T01:34:52.651460 #756] ERROR -- : app error: uninitialized constant IPAddr::PRIVATE_RANGES (NameError)
E, [2021-03-29T01:34:52.651585 #756] ERROR -- : /var/www/discourse/plugins/discourse-azure-blob-storage/gems/2.7.2/gems/azure-storage-common-2.0.2/lib/azure/storage/common/core/utility.rb:218:in `private?'
E, [2021-03-29T01:34:52.651600 #756] ERROR -- : /var/www/discourse/lib/middleware/request_tracker.rb:220:in `is_private_ip?'
E, [2021-03-29T01:34:52.651612 #756] ERROR -- : /var/www/discourse/lib/middleware/request_tracker.rb:233:in `rate_limit'
E, [2021-03-29T01:34:52.651640 #756] ERROR -- : /var/www/discourse/lib/middleware/request_tracker.rb:166:in `call'
E, [2021-03-29T01:34:52.651650 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/engine.rb:527:in `call'
E, [2021-03-29T01:34:52.651660 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/railtie.rb:190:in `public_send'
E, [2021-03-29T01:34:52.651670 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.0.3.5/lib/rails/railtie.rb:190:in `method_missing'
E, [2021-03-29T01:34:52.651681 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-2.2.3/lib/rack/urlmap.rb:74:in `block in call'
E, [2021-03-29T01:34:52.651691 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-2.2.3/lib/rack/urlmap.rb:58:in `each'
E, [2021-03-29T01:34:52.651753 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-2.2.3/lib/rack/urlmap.rb:58:in `call'
E, [2021-03-29T01:34:52.651768 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/unicorn-6.0.0/lib/unicorn/http_server.rb:634:in `process_client'
E, [2021-03-29T01:34:52.651779 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/unicorn-6.0.0/lib/unicorn/http_server.rb:732:in `worker_loop'
E, [2021-03-29T01:34:52.651789 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/unicorn-6.0.0/lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
E, [2021-03-29T01:34:52.651802 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/unicorn-6.0.0/lib/unicorn/http_server.rb:143:in `start'
E, [2021-03-29T01:34:52.651816 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/unicorn-6.0.0/bin/unicorn:128:in `<top (required)>'
E, [2021-03-29T01:34:52.651830 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/bin/unicorn:23:in `load'
E, [2021-03-29T01:34:52.651843 #756] ERROR -- : /var/www/discourse/vendor/bundle/ruby/2.7.0/bin/unicorn:23:in `<main>'

سأبحث في هذا الأمر أكثر غدًا، لكن التحديث المذكور أعلاه لا يبدو أنه يحل المشكلة.

@schungx

يبدو أن الخطأ يشير إلى أنك تستخدم نطاق عنوان IP خاص؟

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

ربما أكون مخطئًا، لكن هذا يشير إلى أن الثابت PRIVATE_RANGES غير مُعرَّف. يجب تعريف هذا الثابت هنا:

لست متأكدًا مما إذا كان هناك تعارض في الأسماء بين فئة IPAddr المُعرَّفة في utility.rb المذكورة أعلاه وتلك المُعرَّفة في Discourse نفسه، لكن هذا سيكون مصدر قلقي الأولي. أنا غير متأكد من كيفية المضي قدمًا في إصلاح ذلك. فكرتي الأولى هي تقديم طلب سحب (PR) يضع فئة IPAddr في Discourse داخل وحدة نمطية. هل هناك أي أفكار أخرى؟

يبدو أن استدعاء private? موجود في السطر 221، وليس في السطر 218 كما ورد في رسالة الخطأ.

لذا، ربما تكون النسخة غير صحيحة؟

آخر نسخة يكون فيها السطر 218 منطقياً هي 1.1.0، حيث يمكنك رؤية أن موقع الخطأ مطابق تماماً:

حسناً، أنا حائر حقاً في هذا الأمر. اتضح أن الإضافة (plugin) لا تزال غير صحيحة.

كلما حاولت حفظ ملف، يظهر الخطأ التالي:

Blob can not be stored: missing dependency for Faraday::Adapter::NetHttpPersistent: cannot load such file -- net/http/persistent
Url: //chenhsongweb.blob.core.windows.net/support/original/2X/e/e5224c77df15646017fb5e4747576206c33904f6.jpeg

لذا، من الواضح أنني أغفلت إضافة require 'net/http/persistent' في مكان ما، لكنني حاولت إضافتها في كل مكان ومع ذلك لا يزال هذا الخطأ يظهر.

على سبيل المثال، أضفتها إلى plugin.rb و lib/azure_blob_store.rb… ومع ذلك لا يزال هذا الخطأ يظهر.

جاء الخطأ من استدعاء cache_file:

/var/www/discourse/plugins/discourse-azure-blob-storage/lib/azure_blob_store.rb:27:in `rescue in store_file'
/var/www/discourse/plugins/discourse-azure-blob-storage/lib/azure_blob_store.rb:17:in `store_file'
/var/www/discourse/plugins/discourse-azure-blob-storage/lib/azure_blob_store.rb:9:in `store_upload'

هل يمكن لروح طيبة أن تعلمني كيف أتخلص من خطأ الاعتماد المفقود؟

حسناً، قد يكون هذا ضرورياً في مهمة Rake. سأضيفه وأرى…

تعديل: لا، هذا ليس هو السبب.

الفشل يحدث في upload_creator

/var/www/discourse/plugins/discourse-azure-blob-storage/lib/azure_blob_store.rb:25:in `rescue in store_file'
/var/www/discourse/plugins/discourse-azure-blob-storage/lib/azure_blob_store.rb:15:in `store_file'
/var/www/discourse/plugins/discourse-azure-blob-storage/lib/azure_blob_store.rb:7:in `store_upload'
/var/www/discourse/lib/upload_creator.rb:160:in `block (2 levels) in create_for'
/var/www/discourse/lib/upload_creator.rb:159:in `open'
/var/www/discourse/lib/upload_creator.rb:159:in `block in create_for'

الآن أنا مرتبك تماماً. كيف يمكنني التخلص من خطأ الاعتماد المفقود هذا؟

تعديل 2:

لسبب غريب، عندما أنقر على السهم الصغير في نهاية تتبع المكدس، يأخذني إلى discourse/discourse-azure-blob-storage بدلاً من الشوكة الخاصة بي. أنا متأكد تماماً من أنني أستخدم شوكتي الخاصة في app.config.

تعديل 3:

حاولت التراجع إلى الإصدار السابق من azure-storage-common 2.0.1 الذي لا يستخدم net-http-persistent، لكنه يستخدم بعد ذلك nokogiri الإصدار 1.10 والذي يتعارض مع شيء ما يتطلب الإصدار 1.11… آآآآه!

هل يعرف أحد كيفية حل تعارضات إصدارات nokogiri؟

@pfaffman هل لديك أي أفكار؟ :pray:

تعديل 4:

@maja غير متأكد مما إذا كنت لا تزال تتابع هذه الإضافة. بصفتك المؤلف الأصلي، قد يكون لديك فكرة عما يحدث.

لقد كنت مرتبكاً بسبب خطأ منذ فترة.

يبدو مؤخراً أن Discourse بدأت تتطلب nokogiri الإصدار 1.11، مما يفرض التحديث إلى azure-storage-common الإصدار 2.0.1. ومع ذلك، يستخدم هذا الإصدار net-http-persistent لإجراء مكالمات HTTP (لم تستخدم الإصدارات السابقة ذلك).

في كل مرة يتم فيها إجراء مكالمة Azure، يفشل الخطأ بسبب اعتماد مفقود: missing dependency for Faraday::Adapter::NetHttpPersistent: cannot load such file -- net/http/persistent.

المثير للدهشة أنه حتى لو وضعت require 'net/http/persistent' في كل مرة قبل المكالمة، فلا يزال الفشل يحدث بنفس الخطأ تماماً. على الرغم من أن require تُرجع true مما يعني أن الوحدة تم تحميلها.

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

يشعر الأمر وكأن شيئاً ما يقوم بكتابة ذاكرة التخزين المؤقت الخاصة بـ require ومحو net/http/persistent.

تعديل 5:

حاولت استنساخ azure-storage-blob وتعديله لإزالة net-http-persistent، لكن لا يمكنني العثور على طريقة لجعل Discourse التحميل من مستودع Git بديل… يبدو أنه يحمل دائماً الجيم الرسمي.

تعديل 6:

تحديث: هناك حل يعمل بشكل معقول. ومع ذلك، لا يزال يخضع لاختبارات إضافية لأنه يبدو أنه يتعارض مع أماكن أخرى.

جاء الخطأ الرئيسي من حقيقة أن Faraday لديها نظامها الخاص لإدارة الاعتمادات والذي يتعارض مع Bundler.

الحل الحالي يتجاهل ببساطة الخطأ من Faraday ويحمل الاعتماد بشكل ثابت. ومع ذلك، قد يشير شخص ما لطيف أيضاً إلى طريقة للقيام بذلك بطريقة أكثر أناقة…

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

حسناً، هذه الإضافة معطلة لدرجة أنه لا فائدة من الاستمرار فيها.

أنصح الجميع بإلغاء تثبيت هذه الإضافة واستخدام Flexify.IO بدلاً من ذلك.

إعجابَين (2)