فشل رفع الوسوم ذات الأحرف الخاصة عبر CSV

مرحبًا - أحاول رفع ملف CSV يحتوي على مجموعة من الوسوم، وفي كل مرة أحصل على رسالة خطأ تقول: “عذرًا، حدث خطأ أثناء رفع الملف. يرجى المحاولة مرة أخرى.”

توضح السجلات في لوحة الإدارة ما يلي:

رسالة (تم الإبلاغ عن 8 نسخ)

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

مسار التتبع

/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/validations.rb:80:in `raise_validation_error'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/validations.rb:53:in `save!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/transactions.rb:318:in `block in save!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/transactions.rb:375:in `block in with_transaction_returning_status'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/database_statements.rb:278:in `transaction'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/transactions.rb:212:in `transaction'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/transactions.rb:366:in `with_transaction_returning_status'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/transactions.rb:318:in `save!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/suppressor.rb:48:in `save!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/persistence.rb:55:in `create!'

لقد جربت إنشاء وسم وهمي، أي إدخال واحد فقط في ملف CSV (أي كلمة java)، وحصلت على نفس رسالة الخطأ.

ملاحظة: قمت بتثبيت Discourse على DigitalOcean باستخدام دليل التثبيت الرسمي، وكل شيء آخر يعمل بشكل صحيح.

شكرًا لك!

هل يمكننا تكرار هذا يوم الاثنين @tshenry؟

شكرًا لك @codinghorror - لا تتردد في إخباري إذا وجدت أي شيء. إذا كان ذلك يساعد، فأنا أعمل على الإصدار 2.5.0.beta7 ( 14dc6f350e ) على Droplet بسعة 4 جيجابايت من الذاكرة العشوائية وقرص تخزين SSD بسعة 80 جيجابايت.

بصرف النظر عن ذلك، قمت بتثبيت الإضافات التالية: aksimet، formatting-toolbar، و discourse-voting.

لقد اختبرت هذا للتو على try.discourse.org. استخدمت محرر نصوص بسيط لإنشاء ملف CSV باسم tags.csv يحتوي فقط على كلمة java، وتمكنت من استخدام أداة رفع الوسوم الجماعية لإضافة الوسم الجديد دون أي مشكلة.

يحتوي موقع try.discourse.org على Akismet و discourse-voting، وأنا أشك بشدة في أن إضافة شريط تنسيق النصوص (formatting-toolbar) قد يتسبب في أي تضارب يؤدي إلى الخطأ الذي تواجهه.

هل يمكنك رفع الملفات دون مشاكل في سياقات أخرى (مثل المنشورات أو السمات، إلخ)؟

مرحبًا @tshenry - نعم، يمكنني رفع الصور في المنشورات التي أنشئها إذا كان هذا هو سؤالك.

لقد قمت بتدمير القطرة (droplet) وأعدت تثبيت Discourse، وأستخدم فقط الإضافات التالية.

لا يزال الرفع يفشل. هل الأمر يتعلق بالأذونات؟ أنا مسؤول الموقع، لذا أفترض أنه يجب أن أملك جميع الأذونات اللازمة للقيام بذلك.

في هذه المرة، أستخدم الإصدار 2.5.0.beta7 ( 70e50a2255 )

أخبرني إذا كان هناك أي شيء آخر تود مني تجربته. شكرًا!

آه - لقد وجدت شيئًا مثيرًا للاهتمام @codinghorror @tshenry.

إذا كان اسم ملف الوسوم tags-1.csv، فإنني أحصل على خطأ في التحميل. أما إذا قمت بتسمية الملف tags.csv، فإن تحميل الوسوم ينجح :slight_smile:

هل هذا التسمية ضروري لمنصة Discourse (وقد فاتني قراءته)، أم أنه ربما عيب؟

حسناً، لقد حاولت إعادة تسمية ملفي إلى tags-1.csv وما زلت لم أستطع تكرار الخطأ. إذا قمت بإعادته إلى tags-1.csv وحاولت الرفع مرة أخرى، هل سيفشل مرة أخرى؟ أتساءل عما إذا كان هناك شيء آخر يحدث في اسم ملفك الأصلي، وأن تغييره إلى tags.csv قد أصلح المشكلة بطريقة ما.

لا، لا يزال الأمر لا يعمل بالنسبة لي. كل ما أفعله على جهاز Mac الخاص بي هو:

$ vi tags-1.csv

ثم:
i للدخول إلى وضع التحرير
java
esc للخروج من وضع التحرير
:wq ثم Enter للحفظ والخروج.

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

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

شكرًا لك @tshenry.

أرى مشكلة أخرى (مرة أخرى، لست متأكدًا ما إذا كانت مرتبطة ببيئتي).

كانت وسومِي قائمةً بلغات برمجة. كنتُ قد أضفت C++ وC# إلى هذه القائمة، وبمجرد إزالتهما من ملف tags.csv، نجح التحميل الجماعي. أتساءل إذا كان لهذا علاقةً بكون الوسم ينتهي بحرف خاص. مرة أخرى، قد يكون الأمر خاصًا بي فقط :man_shrugging:

هذا هو المشكلة على الأرجح. أتساءل عما إذا كان بإمكاننا إرجاع رسالة خطأ أفضل هنا للوسوم غير الصالحة؟

نعم! هذا بالتأكيد هو المشكلة. كنتُ أظن أننا نعمل فقط مع كلمة java في الملف بناءً على مشاركتك الأخيرة. ستحتاج إلى استخدام شيء مثل cpp أو c-sharp وما إلى ذلك.

نعم، أعتقد أن ذلك سيكون مثاليًا. رسالة الخطأ الحالية لا تمنح المستخدم الكثير من التوجيه:

عذرًا، حدث خطأ أثناء تحميل الملف. يرجى المحاولة مرة أخرى.

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

كنتُ أعتزم تعديل النص (لإشارة إلى احتمال وجود وسوم غير صالحة)، لكنني أعتقد أن هذا النص ينطبق على جميع عمليات الرفع، لذا قد لا يكون دقيقًا دائمًا.

طريقة سريعة حسب رأيي هي إضافة بضع جمل في قسم “الوسوم” ضمن إعدادات المسؤول، توضح القيود المفروضة على أسماء الوسوم.

وربما إضافة تحذير في دليل وسوم Discourse (Admin guide to tags in Discourse)

نعم، يبدو أن هذا هو الحال بالتأكيد. لقد وجدت المكان الذي يتم فيه إلقاء الخطأ العام في كود رفع الوسوم، لذا سأحاول إنشاء خطأ أكثر تحديدًا لهذه الحالة في طلب سحب (PR).