خطأ NoMethodError عند إعادة بناء إجراءات المستخدم

مرحبًا بالجميع، لقد قمتُ بتقديم هذا الإصدار في البداية تحت قسم #support، لكنني متأكدٌ إلى حد كبير أنه الآن خطأ (bug) بعد تكراره عدة مرات على تثبيتات جديدة. بدأتُ في مواجهة هذه المشكلة فقط بعد إصدار Discourse الأحدث. إليك خطوات إعادة إنتاج المشكلة:

  1. اتبع خطوات تثبيت وإعداد Discourse المعتادة (حصلتُ على نفس الخطأ عند التثبيت على Ubuntu Server 18.04 LTS وكذلك على Ubuntu Server 20.04 LTS).

  2. بعد إكمال الإعداد، ادخل إلى الحاوية وشغّل الأمر rake user_actions:rebuild، وستحصل على هذا الخطأ:

    # rake user_actions:rebuild --trace
    ** Invoke user_actions:rebuild (first_time)
    ** Invoke environment (first_time)
    ** Execute environment
    ** Execute user_actions:rebuild
    rake aborted!
    NoMethodError: undefined method `log_topic' for UserActionManager:Class
    /var/www/discourse/lib/tasks/user_actions.rake:14:in `block (2 levels) in <top (required)>'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/relation/delegation.rb:85:in `each'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.2.2/lib/active_record/relation/delegation.rb:85:in `each'
    /var/www/discourse/lib/tasks/user_actions.rake:14:in `block in <top (required)>'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `block in execute'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `each'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `execute'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
    /usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:188:in `invoke'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:160:in `invoke_task'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `block (2 levels) in top_level'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `each'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `block in top_level'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:125:in `run_with_threads'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:110:in `top_level'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:83:in `block in run'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:186:in `standard_exception_handling'
    /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:80:in `run'
    bin/rake:13:in `<top (required)>'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `load'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `kernel_load'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:28:in `run'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:476:in `exec'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor.rb:399:in `dispatch'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:30:in `dispatch'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/base.rb:476:in `start'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:24:in `start'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:46:in `block in <top (required)>'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/friendly_errors.rb:123:in `with_friendly_errors'
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:34:in `<top (required)>'
    /usr/local/bin/bundle:23:in `load'
    /usr/local/bin/bundle:23:in `<main>'
    Tasks: TOP => user_actions:rebuild

رأيتُ في بعض المنشورات الأخرى أن بعض الأشخاص اقترحوا تشغيل الأمر ./launcher rebuild app عند ظهور أخطاء مماثلة، ولكن بعد تنفيذ ذلك، ظلت مشكلة NoMethodError قائمة.

أي أفكار أو مقترحات ستكون محل تقدير كبير. شكرًا مقدّمًا!

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

أرى أيضًا هذا الخطأ. أنا أعمل على نظام Ubuntu 19.10.

عذراً، لا ينبغي أن توجد هذه المهمة بعد الآن، فقد كانت معطلة لسنوات عديدة.

لقد قمت بإزالتها.

قد يكون إعادة بناء إجراءات المستخدم ممكنًا، لكنه معقد للغاية، خاصةً عند مراعاة الإضافات مثل “assign” و “solved”.

4 إعجابات

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

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

على سبيل المثال، تمكنت من جلب جميع المنشورات السابقة لـ Discourse مثل السجل التاريخي ورسم خرائطها بشكل صحيح إلى جميع الحقول في جدول user_action. يبدو أن الجزء المهم في تحقيق ذلك هو تشغيل أمر rake المذكور أعلاه، لأنه أظهر بعد ذلك سجل إعجابات دقيق لكل مستخدم (الأكثر إعجابًا، الإعجابات الممنوحة، المستلمة، إلخ). إذا سيتم إزالة أمر rake المذكور أعلاه، هل تمانع في توجيهي إلى الاتجاه الصحيح لمكان آخر في قاعدة البيانات حيث يجب تخزين إجراءات المستخدمين لتظهر بشكل صحيح في الملفات الشخصية وإحصائيات المستخدمين؟ هل يتم ضغطها وحفظها فقط في جدول user_stats كأرقام صحيحة أم أن هناك مكانًا آخر تذهب إليه بعض هذه البيانات؟

شكرًا لك!

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

discourse/script/import_scripts at main · discourse/discourse · GitHub

4 إعجابات

تم إغلاق هذا الموضوع تلقائيًا بعد 4 أيام. لم يعد السماح بردود جديدة.