Takiro
(Takiro)
30 يوليو 2026، 12:27م
1
قبل بضعة أيام، قمت بتحديث Discourse إلى الإصدار v2026.8.0-latest. تحولت صور رمزية (Avatars) لبعض المستخدمين إلى صورة افتراضية (وليس الصورة الرمزية الحرفية). محاولة رفع صورة جديدة لا تؤدي إلى أي نتيجة. تظهر معاينة الصورة، ولكن عند الحفظ تعود إلى الصورة الافتراضية. لا يهم ما إذا كان المستخدم هو من يقوم بذلك أم المسؤول. لا تظهر واجهة المستخدم أي رسالة خطأ.
في البداية، حاولت تحديث الصور الرمزية باستخدام rake، لكن ذلك لم يفد في شيء. ثم افحص السجلات (Logs) للبحث عما يظهر عند محاولة تغيير الصورة الرمزية، ووجدت رسالة السجل التالية:
فشل في تحسين الصورة: سبب غير معروف upload_id: location: {raise_on_error: true, quality: 90, upload_id: 235861} error_message: no implicit conversion of Hash into String instructions: [“convert”, “png:/var/www/discourse/public/uploads/default/original/3X/2/c/2c620efd4ee10548884a11b7237d5aa9135817b1.png[0]”, “-quality”, “90”, “-auto-orient”, “-gravity”, “center”, “-background”, “transparent”, “-thumbnail”, “24x24^”, “-extent”, “24x24”, “-interpolate”, “catrom”, “-unsharp”, “2x0.5+0.7+0”, “-interlace”, “none”, “-profile”, “/var/www/discourse/vendor/data/RT_sRGB.icm”, “png:/tmp/discourse-thumbnail20260730-360984-9yk3a1.png”]
تم إرسال الملف /var/www/discourse/public/images/avatar.png (0.3ms)
لذا، أعتقد أن هناك عدم تطابق في النوع (Type mismatch) في الكود الذي يتعامل مع تحسين الصور.
المثير للضحك هو أنني لا أستطيع أيضًا رفع صورة رمزية على هذا المنتدى أيضًا، مشككًا في أن شيئًا مشابهًا يحدث هنا أيضًا. على الأقل هنا أحصل على رسالة خطأ تفيد بأن “حدث خطأ ما”.
هل هناك أي فكرة حول كيفية حل هذه المشكلة، أم أنه لا يوجد شيء يمكنني فعله سوى الانتظار حتى يتم إصدار الإصلاح؟
david
(David Taylor)
30 يوليو 2026، 12:44م
4
هل يمكنك مشاركة تتبع المكدس الكامل لذلك السجل؟ يمكنك العثور عليه عن طريق زيارة /logs، واختياره، ثم تحديد علامة “تتبع المكدس” في الأسفل.
Takiro
(Takiro)
30 يوليو 2026، 12:53م
5
بالطبع، إليك التفاصيل.
رسالة (تم الإبلاغ عن 5 نسخ)
فشل في تحسين الصورة: سبب غير معروف
تتبع المكدس
/var/www/discourse/lib/discourse.rb:1115:in 'block in Discourse.warn'
/var/www/discourse/lib/discourse.rb:1109:in 'Array#each'
/var/www/discourse/lib/discourse.rb:1109:in 'Discourse.warn'
/var/www/discourse/app/models/optimized_image.rb:362:in 'OptimizedImage.convert_with'
/var/www/discourse/plugins/discourse-topic-previews-sidecar/lib/topic_previews/optimized_image_extension.rb:25:in 'TopicPreviews::OptimizedImageExtension#optimize'
/var/www/discourse/app/models/optimized_image.rb:317:in 'OptimizedImage.resize'
/var/www/discourse/lib/upload_creator.rb:583:in 'UploadCreator#crop!'
/var/www/discourse/lib/upload_creator.rb:115:in 'block in UploadCreator#create_for'
/var/www/discourse/lib/distributed_mutex.rb:53:in 'block in DistributedMutex#synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in 'Thread::Mutex#synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in 'DistributedMutex#synchronize'
/var/www/discourse/lib/distributed_mutex.rb:34:in 'DistributedMutex.synchronize'
/var/www/discourse/lib/upload_creator.rb:102:in 'UploadCreator#create_for'
/var/www/discourse/app/models/user_avatar.rb:133:in 'UserAvatar.import_url_for_user'
/var/www/discourse/app/jobs/regular/download_avatar_from_url.rb:17:in 'Jobs::DownloadAvatarFromUrl#execute'
/var/www/discourse/app/jobs/base.rb:313:in 'block (2 levels) in Jobs::Base#perform'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in 'RailsMultisite::ConnectionManagement::NullInstance#with_connection'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management.rb:17:in 'RailsMultisite::ConnectionManagement.with_connection'
/var/www/discourse/app/jobs/base.rb:300:in 'block in Jobs::Base#perform'
/var/www/discourse/app/jobs/base.rb:297:in 'Array#each'
/var/www/discourse/app/jobs/base.rb:297:in 'Jobs::Base#perform'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:220:in 'Sidekiq::Processor#execute_job'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:185:in 'block (4 levels) in Sidekiq::Processor#process'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:180:in 'Sidekiq::Middleware::Chain#traverse'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:183:in 'block in Sidekiq::Middleware::Chain#traverse'
/var/www/discourse/lib/sidekiq/suppress_user_email_errors.rb:6:in 'Sidekiq::SuppressUserEmailErrors#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:182:in 'Sidekiq::Middleware::Chain#traverse'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:183:in 'block in Sidekiq::Middleware::Chain#traverse'
/var/www/discourse/lib/sidekiq/discourse_event.rb:6:in 'Sidekiq::DiscourseEvent#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:182:in 'Sidekiq::Middleware::Chain#traverse'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:183:in 'block in Sidekiq::Middleware::Chain#traverse'
/var/www/discourse/lib/sidekiq/pausable.rb:131:in 'Sidekiq::Pausable#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:182:in 'Sidekiq::Middleware::Chain#traverse'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:183:in 'block in Sidekiq::Middleware::Chain#traverse'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/job/interrupt_handler.rb:9:in 'Sidekiq::Job::InterruptHandler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:182:in 'Sidekiq::Middleware::Chain#traverse'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:183:in 'block in Sidekiq::Middleware::Chain#traverse'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/metrics/tracking.rb:26:in 'Sidekiq::Metrics::ExecutionTracker#track'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/metrics/tracking.rb:134:in 'Sidekiq::Metrics::Middleware#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:182:in 'Sidekiq::Middleware::Chain#traverse'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:173:in 'Sidekiq::Middleware::Chain#invoke'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:184:in 'block (3 levels) in Sidekiq::Processor#process'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:145:in 'block (6 levels) in Sidekiq::Processor#dispatch'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/job_retry.rb:118:in 'Sidekiq::JobRetry#local'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:144:in 'block (5 levels) in Sidekiq::Processor#dispatch'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/config.rb:39:in 'block in <class:Config>'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:139:in 'block (4 levels) in Sidekiq::Processor#dispatch'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:281:in 'Sidekiq::Processor#stats'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:134:in 'block (3 levels) in Sidekiq::Processor#dispatch'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/job_logger.rb:15:in 'Sidekiq::JobLogger#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:133:in 'block (2 levels) in Sidekiq::Processor#dispatch'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/job_retry.rb:85:in 'Sidekiq::JobRetry#global'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:132:in 'block in Sidekiq::Processor#dispatch'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/job_logger.rb:40:in 'Sidekiq::JobLogger#prepare'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:131:in 'Sidekiq::Processor#dispatch'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:183:in 'block (2 levels) in Sidekiq::Processor#process'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:182:in 'Thread.handle_interrupt'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:182:in 'block in Sidekiq::Processor#process'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:181:in 'Thread.handle_interrupt'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:181:in 'Sidekiq::Processor#process'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:86:in 'Sidekiq::Processor#process_one'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:76:in 'Sidekiq::Processor#run'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/component.rb:10:in 'Sidekiq::Component#watchdog'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/component.rb:19:in 'block in Sidekiq::Component#safe_thread'
david
(David Taylor)
30 يوليو 2026، 12:56م
7
يبدو أن المشكلة تكمن في إضافة d-topic-previews-sidecar. سأقوم بفحص الأمر وإرسال طلب سحب (PR) لإجراء التغيير الأساسي.
هذا أمر مدهش. نحن لا نستخدم هذه الإضافة هنا، ويبدو أن رفع الصور الشخصية يعمل بشكل سليم لدي. هل يمكنك المحاولة مرة أخرى؟ إذا ظهر لك خطأ، فسيكون رائعاً أن ترسل لقطة شاشة!
david
(David Taylor)
30 يوليو 2026، 1:01م
8
آه، يبدو أن هذه الإضافة مؤرشفة ولم تعد مدعومة (دليل الاستخدام ). يجب عليك إزالتها من ملف app.yml وتشغيل الأمر ./launcher rebuild app.
Takiro
(Takiro)
30 يوليو 2026، 1:13م
9
نعم، قمت باستبدال الإضافة الأصلية بـ “legacy package” بعد أن تم حذف المستودع الأصلي بالكامل وأصبح غير متاح. سأحاول إزالة الإضافة لأرى ما إذا كان ذلك يصنع فرقًا.
إليك رسالة الخطأ التي تظهر عند محاولة رفع صورة رمزية هنا
لكنها تعمل الآن، يجب أن تكون المشكلة من جانبي.
على أي حال، سأبلغكم بعد تعطيل الإضافة.
Canapin
(Coin-coin le Canapin)
30 يوليو 2026، 1:26م
10
ظهرت لي هذه الرسالة بعد فتح موضوع منذ نصف ساعة. لا أملك خطوات لإعادة إنتاج المشكلة.
Takiro
(Takiro)
30 يوليو 2026، 1:38م
11
لقد قمت بإزالة الإضافة، ويبدو أن كل شيء يعمل بشكل جيد مرة أخرى. شكرًا لك على المساعدة، وأعتذر عن الإزعاج.