تعيين Discourse - خلل يؤدي إلى تعطل الموقع

لقد قمتُ مؤخرًا بتغيير إعدادات الموقع للمجموعة (أو المجموعات) القادرة على استخدام Discourse Assign. حدث خطأ فادح عند الضغط على زر التحديث، مما أدى إلى تعطل الموقع بالكامل.

لقد قمتُ منذ ذلك الحين بتعطيل Discourse Assign، مما أعاد الموقع إلى العمل، لكنني لم أعد قادرًا على جعل Discourse Assign يعمل مرة أخرى. عند إعادة تمكينه، يتم إسقاط الموقع، ولا يمكنني تغيير إعدادات الموقع لإضافة Discourse Assign.

أفحص سجلات الأخطاء، وهناك خطأان:

ActiveRecord::StatementInvalid (PG::InvalidTextRepresentation: ERROR:  invalid input syntax for integer: "patently-staff"
LINE 1: ...RE "group_users"."user_id" = 1 AND (groups.id in ('patently-...
                                                             ^
: SELECT  1 AS one FROM "groups" INNER JOIN "group_users" ON "groups"."id" = "group_users"."group_id" WHERE "group_users"."user_id" = 1 AND (groups.id in ('patently-staff')) LIMIT 1)
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.0.2/lib/patches/db/pg.rb:69:in `async_exec_params'

وأيضًا:

Failed to handle exception in exception app middleware : PG::InvalidTextRepresentation: ERROR:  invalid input syntax for integer: "patently-staff"
LINE 1: ...RE "group_users"."user_id" = 1 AND (groups.id in ('patently-...
                                                             ^
: SELECT  1 AS one FROM "groups" INNER JOIN "group_users" ON "groups"."id" = "group_users"."group_id" WHERE "group_users"."user_id" = 1 AND (groups.id in ('patently-staff')) LIMIT 1

هل إضافة discourse-assign محدثة في نسختك؟ أم ربما قمت بتفرع الإضافة منذ فترة؟ كان هناك تغيير في إضافة discourse-assign في يوليو يبدو ذا صلة بالأخطاء التي تواجهها.

إعجابَين (2)

مرحبًا بنار، أنا متأكد تقريبًا من أنه كان محدثًا، فأنا أقوم بتحديث كل شيء بانتظام بما في ذلك الإضافات.

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

مرحبًا @jerry0،

وفقًا للسجلات، يبدو أن الإضافة محدثة. ما إصدار Discourse الذي تستخدمه؟

إعجابَين (2)

الأحدث، حاليًا 2.4.0.beta4

حسنًا، أفهم. هل قمت بتغيير الإعداد قبل التحديث إلى beta4 أم بعده؟

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

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

شكرًا لك @Roman

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

لست متأكدًا من كيفية القيام بذلك (بالمناسبة، قد أكون أخطأت في التعبير عندما قلت “عطلت/فعلت” في منشوري الأصلي - ما قصدته هو أنني قمت بتعليق رابط git clone في ملف app.yml لإضافة الإضافة). عندما أضيف الإضافة في ملف yml، ينهار الموقع فورًا (وقبل ذلك كانت مفعلة)، لذا لا يمكنني الدخول ثم تعيينها على معطلة… ما لم أكون قد أسأت فهمك؟

قد يكون ذلك ضروريًا، وسأكون ممتنًا جدًا لتوفيره.

إذا لم يزعجك ذلك، أود التحقق من أمر آخر قبل تعديل الإعداد يدويًا.

هل يمكنك تنفيذ هذا الكود داخل وحدة تحكم Rails وإخباري بالمخرجات؟

DB.query_single(<<~SQL
  SELECT site_settings.value FROM site_settings WHERE site_settings.name = 'assign_allowed_on_groups'
SQL
).first.to_s.split('|')

هذا يجب أن يخبرنا ما إذا فشلنا في ترحيل قيمة الإعداد.

للوصول إلى وحدة التحكم:

  • انتقل (cd) إلى مجلد Discourse الخاص بك
  • أدخل الحاوية بتشغيل ./launcher enter app
  • افتح وحدة تحكم Rails بتشغيل rails c
3 إعجابات

الاستجابة هي

=> [“patently-staff”]

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

شكرًا لك يا جيري.

هناك بالتأكيد شيء ما يحدث هنا. سأقوم بفحص الأمر لمعرفة سبب حدوثه.

إليك السكربت:


group_id = Group.where(name: 'patently-staff').pluck(:id).join('|')

DB.exec("UPDATE site_settings SET value='#{group_id}' WHERE site_settings.name = 'assign_allowed_on_groups'")

بعد تشغيله، يجب أن تتمكن من إعادة تمكين الإضافة.

7 إعجابات

ممتاز، لقد نجح الأمر :grin: شكراً لك @Roman. أخبرني إذا كان هناك أي شيء يمكنني تقديمه للمساعدة بشكل أكبر.

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

مرحبًا رومان،
واجهنا مشكلة مماثلة مع إضافة discourse-assign على موقعنا بعد الترقية إلى الإصدار 2.4.0beta4.

تظهر المشكلة فقط عند تسجيل دخول المستخدمين عبر LDAP. (نستخدم “GitHub - jonmbake/discourse-ldap-auth: Discourse plugin to enable LDAP/Active Directory authentication. · GitHub” لاتصال LDAP)

الاستجابة لاستعلام DB.query هي:
=> [“staff”]
لكن “Group.where(name: ‘staff’).pluck(:id).join(‘|’)” تُرجع “”.

بالمناسبة: في الإصدار “2.4.0.beta1 +203” كانت الاستجابات مماثلة، لكن تسجيل الدخول عبر LDAP كان ممكنًا. (إصدار LDAP 0.4.0، وإصدار assign 0.1)

أي مساعدة مرحب بها،
شكرًا،
فرانك

مرحبًا @diwr،

وفقًا لذلك الاستعلام، لا يبدو أن لديك مجموعة تسمى staff. ربما قمت بإعادة تسميتها إلى شيء آخر؟

يمكنك التحقق من ذلك بتنفيذ: Group.where(id: 3).pluck(:name)

أعتقد أن عملية الترحيل لن تعمل إذا تم إعادة تسمية مجموعة staff. سأقوم بمراجعة هذا الأمر اليوم.

إعجابَين (2)

شكرًا لك @Roman

يبدو أنه تم إعادة تسميته إلى “فريق”
ما الذي يجب فعله الآن؟

يمكنك تشغيل السكربت باستخدام “team” كاسم للمجموعة.

4 إعجابات

@Roman
شكرًا جزيلاً.
كان عليّ تشغيل “./launcher rebuild app” بعد تعيين القيمة، ولكن بعد ذلك نجح الأمر.

6 إعجابات