نقل postgres db إلى خادم db مركزي: خطأ في البناء

مرحباً،
أقوم حاليًا بالترحيل من إعداد حاويتين تقليديتين (حاويات ويب فقط وحاويات بيانات منفصلة) إلى إعداد حيث يتم استضافة قاعدة البيانات على خادم قاعدة بيانات مركزي (ليس داخل حاوية دوكر).
تم إنشاء قاعدة البيانات المركزية من dump.sql الذي يعد جزءًا من ملف النسخ الاحتياطي. يستخدم docker compose web_only.yaml

الاتصال بقاعدة بيانات بوستجريس المركزية

DISCOURSE_DB_SOCKET: ‘’
DISCOURSE_DB_USERNAME: discourse
DISCOURSE_DB_PASSWORD: xxxx
DISCOURSE_DB_HOST: 10.10.10.xx
DISCOURSE_DB_NAME: discourse

أثناء بناء web_only، أحصل على الخطأ التالي:

فشل
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' فشل مع العودة #<Process::Status: pid 741 exit 1>
موقع الفشل: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
فشل التنفيذ مع المعلمات {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
فشل التمهيد برمز الخروج 1
** فشل التمهيد ** يرجى التمرير لأعلى والبحث عن رسائل خطأ سابقة، قد يكون هناك أكثر من واحدة.

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

هل أنت متأكد من أن قاعدة البيانات البعيدة متاحة من الخادم؟ يبدو أنها ليست كذلك. هل يمكنك الاتصال بمنفذ قاعدة البيانات باستخدام telnet من جهاز خادم الويب؟

مرحباً جاي،

لقد اتبعت سلسلة فالكو على Configure Discourse to use a separate PostgreSQL server. خادم قاعدة البيانات متاح من الجهاز الظاهري:

root@docker2:/var/discourse# pg_isready -d discourse -h 10.10.10.18 -p 5432 -U discourse    
10.10.10.18:5432 - يتم قبول الاتصالات

(الاتصالات مقبولة)

اسم قاعدة البيانات والمستخدم وكلمة المرور في web_only.yml صحيحة أيضًا. خطأ البناء هو:

فشل
--------------------
Pups::ExecError: cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate' فشل مع العودة #<Process:
:Status: pid 829 exit 1>
موقع الفشل: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
فشل التنفيذ مع المعلمات {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migra\nte'"]}
فشل التمهيد برمز خروج 1

أنا لست خبيرًا في لغة روبي، لذا سأحتاج إلى بعض المساعدة في تصحيح الأخطاء بدءًا من الخطأ الذي يظهر هنا.

وداعًا، تومي

في هذه الحالة:

ما هي الإضافات لديك؟ هل لديك إضافة الذكاء الاصطناعي؟

ما هو إصدار PostgreSQL الذي تستخدمه؟

  • PostgreSQL 13.12
  • لا يوجد مكون إضافي للذكاء الاصطناعي
  • المكونات الإضافية:
cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-shared-edits.git
          - git clone https://github.com/discourse/discourse-chat-integration
          - git clone https://github.com/discourse/wp-discourse
          - git clone https://github.com/discourse/discourse-openid-connect
          - git clone https://github.com/discourse/discourse-calendar
          - git clone https://github.com/discourse/discourse-data-explorer
          - git clone https://github.com/paviliondev/discourse-events
          - git clone https://github.com/paviliondev/discourse-locations
          - git clone https://github.com/discourse/discourse-reactions
          - git clone https://github.com/discourse/discourse-chat
          - git clone https://github.com/discourse/discourse-voting.git
          - git clone https://github.com/discourse/discourse-user-notes.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-footnote.git
          - git clone https://github.com/discourse/discourse-docs.git
          - git clone https://github.com/discourse/discourse-docs-card-filter.git
          - git clone https://github.com/discourse/discourse-assign.git
          - git clone https://github.com/discourse/discourse-templates.git
          - git clone https://github.com/discourse/discourse-saved-searches.git
          - git clone https://github.com/discourse/discourse-tooltips
          - git clone https://github.com/nathan-nz/discourse-wikified-posts
          - git clone https://github.com/discourse/discourse-post-voting.git
          - git clone https://github.com/discourse/discourse-encrypt.git
          - git clone https://github.com/discourse/discourse-zoom.git
          - git clone https://github.com/discourse/discourse-spoiler-alert.git
          - git clone https://github.com/discourse/discourse-category-experts.git

هل يمكنك

؟

رسالة الخطأ الدقيقة في تتبع الخطأ ستخبرنا بالضبط ما هي المشكلة :smile:

هل خطتك للتخلي عن حاوية البيانات؟

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

رمز الخطأ:

> FAILED
> --------------------
> Pups::ExecError: cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate' فشل مع العودة #<Process::Status: pid 816 exit 1>
> موقع الفشل: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
> فشل التنفيذ مع المعلمات {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
> فشل التمهيد برمز الخروج 1

في النظام الجديد، يجب أن تأتي البيانات من قاعدة البيانات المركزية بدلاً من قاعدة بيانات docker إن أمكن.

أتساءل عما إذا كان تعيين هذا إلى قيمة فارغة بدلاً من عدم تعيينه سيسبب مشاكل.

على أي حال، يرجى نشر المخرجات الكاملة.

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

سجل البناء الكامل بعد

./launcher rebuild web_only

web_only_build.zip (9.4 KB)

ملف الـ yaml

web_only.zip (2.4 KB)

فيما يتعلق بـ DISCOURSE_DB_SOCKET: ‘’: بما أننا نستخدم اتصالاً عن بعد، أعتقد أن قيمة المقبس ليست ذات صلة في كلتا الحالتين (بيانات موصولة أو بيانات عن بعد)

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

كان الخطأ أبعد في سجل البناء:

…
docker_manager is already at latest compatible version
wp-discourse is already at latest compatible version

I, [2023-11-10T21:08:17.388213 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
Plugin name is 'discourse-topic-voting', but plugin directory is named 'discourse-voting'
rake aborted!
ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERROR:  permission denied for table users (ActiveRecord::StatementInvalid)

إذًا أخبار جيدة! إنه يتصل بشكل جيد، إنها أذونات قاعدة البيانات التي تحتاج إلى تعديل.

إعجابَين (2)

هممم، غريب، مستخدم قاعدة بيانات discourse لديه

postgres=# GRANT ALL ON DATABASE discourse TO discourse;

على خادم postgres المركزي. هل نحتاج إلى أي شيء آخر لهذا الدور؟

لا يؤثر ذلك على الجداول الموجودة.

بشكل غير رسمي، ربما:

ALTER DATABASE "discourse" OWNER TO "discourse";

أو:

ALTER DEFAULT PRIVILEGES IN SCHEMA "public" GRANT ALL ON TABLES TO "discourse";

يجب أن تخبرك سجلات postgres أيضًا بتفاصيل أكثر عن العمليات التي تفشل.

4 إعجابات

… حسناً حسناً، يبدو أن لدي بعض مشاكل الأذونات الإضافية هنا، انظر إلى /var/log/postgresql/postgresql-13-main.log:

2023-11-10 22:07:58.371 UTC [196127] postgres@postgres STATEMENT:  ALTER DEFAULT PRIVILEGES IN SCHEMA 'public' GRANT ALL ON TABLES TO 'discourse';
2023-11-10 22:10:18.270 UTC [196160] discourse@discourse ERROR:  permission denied for table site_settings
2023-11-10 22:10:18.270 UTC [196160] discourse@discourse STATEMENT:  SELECT name, data_type, value FROM site_settings
2023-11-10 22:10:18.313 UTC [196160] discourse@discourse ERROR:  permission denied for table users
2023-11-10 22:10:18.313 UTC [196160] discourse@discourse STATEMENT:  SELECT COUNT(*) FROM (SELECT 1 AS one FROM \"users\" LIMIT 20) subquery_for_count

حسنًا، كالعادة، كانت مشكلة “طبقة 8” :smiling_face_with_tear:
كان لدي بالفعل قاعدة بيانات discourse في postgres ولكن المستخدم/الدور discourse لم يكن لديه كل الامتيازات المطلوبة عليها. وقد فاتني بعض الاختلافات “السلوكية” الرئيسية بين mariadb و postgres …
الآن قمت بإعادة إنشاء كل شيء: المستخدم، قاعدة البيانات، الأذونات للمستخدم/الدور (بما في ذلك ALTER DEFAULT PRIVILEGES FOR ROLE discourse IN SCHEMA public GRANT ALL ON TABLES TO “discourse”؛ لمطابقة الجداول التي أنشأها هذا المستخدم في المستقبل)
اكتمل البناء ويعمل المثيل بشكل جيد مع خادم postgres البعيد، لذا فهو جاهز لاستيراد النسخة الاحتياطية من المثيل القديم.

4 إعجابات

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.