NoMethodError: الطريقة غير معرفة `min_tags_from_required_group'

يا فريق Discourse!

أحاول تشغيل Discourse Docker على Ubuntu على الإصدار المستقر (v2.8.8) وأواجه الخطأ التالي:

rake aborted!
NoMethodError: undefined method `min_tags_from_required_group' for #<Category:0x00007fc2ffae9f38>
/src/lib/seed_data/categories.rb:114:in `create_category'
/src/lib/seed_data/categories.rb:15:in `block (2 levels) in create'
/src/lib/seed_data/categories.rb:15:in `each'
/src/lib/seed_data/categories.rb:15:in `block in create'
/src/lib/seed_data/categories.rb:14:in `create'
(eval):6:in `block (2 levels) in run_file'
/src/lib/tasks/db.rake:225:in `block (2 levels) in <main>'
/src/lib/distributed_mutex.rb:33:in `block in synchronize'
/src/lib/distributed_mutex.rb:29:in `synchronize'
/src/lib/distributed_mutex.rb:29:in `synchronize'
/src/lib/distributed_mutex.rb:14:in `synchronize'
/src/lib/tasks/db.rake:210:in `block in <main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

معلومات إضافية حول ما قمت به حتى الآن:

ما قمت به حتى الآن للوصول إلى هنا:

sudo -s
git clone -b v2.8.8 https://github.com/discourse/discourse.git
chmod -R 2777 ./discourse
cd discourse

واجهت بعض المشاكل مع الإشارات المرجعية سابقًا لذلك اضطررت إلى:

nano db/migrate/20220104053343_add_bookmark_polymorphic_columns.rb

ولصقت هذا: discourse/db/migrate/20220322024216_add_bookmark_polymorphic_columns.rb at cd817a436574cd00f0bae339ec0c4fe2fcf2bb50 · discourse/discourse · GitHub

ثم عندما أقوم بتشغيل:

d/boot_dev -p --init

أتلقى الخطأ المتعلق بـ min_tags_from_required_groups.

هل يمكن لأحد المساعدة؟

هل هذا تثبيت تطوير أم تثبيت قياسي؟

إذا كنت تحاول التشغيل على بيئة إنتاج، فستقوم بتعيين الإصدار إلى مستقر في ملف app.yml الخاص بك. لن تقوم باستنساخ discourse كما أشرت.

هل لديك أي إضافات؟

مرحباً @pfaffman ،

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

هذه نسخة تطويرية، لذلك ليس لدي ملف app.yml

لم يتم تثبيت أي إضافات، كنت آمل فقط في تشغيل نسخة تطويرية على الإصدار المستقر على أوبونتو.

آه! فهمت الآن. ربما لا ينبغي لي النشر في منتصف الليل.

هل كانت هناك قاعدة بيانات قبل أن تنتقل إلى المستقر؟ ربما تحتاج إلى

  rake db:drop db:create db:migrate

لا تحتاج إلى انتقاء ترحيل.

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

مرحباً @pfaffman،

أتمنى أن تكون قد قضيت عطلة نهاية أسبوع رائعة! شكراً على ردك، سأقوم باختبار هذا اليوم وأعود إليك!

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

أهلاً @pfaffman،

بعد تشغيل sudo -s ثم d/rake db:drop db:create db:migrate، واجهت الخطأ التالي:

PG::InsufficientPrivilege: ERROR:  must be owner of database discourse_development
Couldn't drop database 'discourse_development'
rake aborted!
ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERROR:  must be owner of database discourse_development


Caused by:
PG::InsufficientPrivilege: ERROR:  must be owner of database discourse_development

Tasks: TOP => db:drop:_unsafe
(See full trace by running task with --trace)

دخلت إلى d/psql وحصلت على القائمة:

discourse-> \l
                                          List of databases
           Name           |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges    
--------------------------+----------+----------+-------------+-------------+------------------------
 discourse                | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres          +
                          |          |          |             |             | postgres=CTc/postgres +
                          |          |          |             |             | discourse=CTc/postgres
 discourse_development    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres          +
                          |          |          |             |             | postgres=CTc/postgres +
                          |          |          |             |             | discourse=CTc/postgres
 discourse_test           | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres          +
                          |          |          |             |             | postgres=CTc/postgres +
                          |          |          |             |             | discourse=CTc/postgres
 discourse_test_multisite | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres          +
                          |          |          |             |             | postgres=CTc/postgres +
                          |          |          |             |             | discourse=CTc/postgres
 postgres                 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0                | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres           +
                          |          |          |             |             | postgres=CTc/postgres
 template1                | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres           +
                          |          |          |             |             | postgres=CTc/postgres
(7 rows)

كيف يمكنني حل هذا الخطأ؟

هممم. ربما يمكنك حذف تلك قواعد البيانات وإعادة إنشائها بنفسك ثم ترحيلها باستخدام مهمة rake. أو امنح مستخدم discourse الحقوق لإنشاء وتدمير (أعتقد أن هذا أسهل).

مرحباً @pfaffman،

لستُ على دراية تامة بعملية منح مستخدمي discourse الحق في الإنشاء والتدمير للأسف. في الخيار الأول، هل تقصد أن أقوم بحذف جميع هذه قواعد البيانات، ثم تشغيل d/rake db:create db:migrate؟ هل هذا صحيح؟

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

ابحث في جوجل عن “أدوار مستخدمي بوستجريس” أو شيء من هذا القبيل. هذا ما أفعله. إنه شيء كهذا

su - postgres
psql
grant all rights to usee 'discoursev;

لكن هذا ربما يكون خاطئًا

أهلاً @pfaffman،

شكراً لمساعدتك حتى الآن! أريد فقط أن أتراجع خطوة إلى الوراء قبل المضي قدماً في استكشاف أخطاء psql وإصلاحها، هدفي الرئيسي هو فقط تشغيل بيئة تطوير Discourse docker (على الإصدار المستقر) على Ubuntu، والتي تعمل بشكل جيد ومتوقع على Mac. ألا ينبغي أن أكون قادراً على القيام بذلك دون أخطاء الجدول والهجرة هذه؟ عندما أحاول إجراء تثبيت نظيف، أحصل على خطأ الإشارة المرجعية، وبعد حل ذلك، أحصل على خطأ NoMethodError هذا، والآن خطأ InsufficientPrivilege.

في البداية، اعتقدت أن السبب هو أنني كنت على test-passed ثم التبديل إلى الإصدار المستقر تسبب في المشكلة، ولكن حتى في نسخة Ubuntu نظيفة وفارغة، لا يزال خطأ NoMethodError يظهر، هذا بدون أي قواعد بيانات سابقة موجودة، لقد قمت للتو بالخطوة رقم 1 والخطوة رقم 2 هنا:

هل يمكنك تثبيت الإصدار المستقر على Ubuntu بدون أي مشاكل؟

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

جرب

   ./bundle exec rake db:drop db:create db:migrate

مرحباً @pfaffman،

شكراً لردك! للأسف ما زلت أواجه نفس المشكلة:

d/bundle exec rake db:drop db:create db:migrate
PG::InsufficientPrivilege: ERROR:  must be owner of database discourse_development
Couldn't drop database 'discourse_development'
rake aborted!
ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERROR:  must be owner of database discourse_development
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'

Caused by:
PG::InsufficientPrivilege: ERROR:  must be owner of database discourse_development
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => db:drop:_unsafe
(See full trace by running task with --trace)

لقد حاولت هذا على مثيل فارغ (بدأت من البداية، لا توجد قواعد بيانات أو معلومات موجودة) باستخدام دليل المبتدئين وظهرت نفس النتيجة.

هذا هو الخطأ الذي ما زلت أحصل عليه في d/rails s

NoMethodError (undefined method `min_tags_from_required_group' for #<Category:0x00007f3cca7ce5a8>)
(eval):36:in `_fast_attributes'
app/models/site.rb:70:in `block in all_categories_cache'
lib/cache.rb:94:in `fetch'
app/models/site.rb:52:in `all_categories_cache'
app/models/site.rb:78:in `categories'
app/serializers/site_serializer.rb:203:in `categories'
(eval):32:in `_fast_attributes'
app/models/site.rb:167:in `json_for'
app/controllers/application_controller.rb:595:in `preload_anonymous_data'
app/controllers/finish_installation_controller.rb:69:in `ensure_no_admins'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/missing_avatars.rb:23:in `call'
lib/middleware/turbo_dev.rb:34:in `call'

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