مرحباً،
أقوم حاليًا بالترحيل من إعداد حاويتين تقليديتين (حاويات ويب فقط وحاويات بيانات منفصلة) إلى إعداد حيث يتم استضافة قاعدة البيانات على خادم قاعدة بيانات مركزي (ليس داخل حاوية دوكر).
تم إنشاء قاعدة البيانات المركزية من dump.sql الذي يعد جزءًا من ملف النسخ الاحتياطي. يستخدم docker compose web_only.yaml
فشل
--------------------
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 من جهاز خادم الويب؟
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
أنا لست خبيرًا في لغة روبي، لذا سأحتاج إلى بعض المساعدة في تصحيح الأخطاء بدءًا من الخطأ الذي يظهر هنا.
فيما يتعلق بـ DISCOURSE_DB_SOCKET: ‘’: بما أننا نستخدم اتصالاً عن بعد، أعتقد أن قيمة المقبس ليست ذات صلة في كلتا الحالتين (بيانات موصولة أو بيانات عن بعد)
…
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)
إذًا أخبار جيدة! إنه يتصل بشكل جيد، إنها أذونات قاعدة البيانات التي تحتاج إلى تعديل.
… حسناً حسناً، يبدو أن لدي بعض مشاكل الأذونات الإضافية هنا، انظر إلى /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”
كان لدي بالفعل قاعدة بيانات discourse في postgres ولكن المستخدم/الدور discourse لم يكن لديه كل الامتيازات المطلوبة عليها. وقد فاتني بعض الاختلافات “السلوكية” الرئيسية بين mariadb و postgres …
الآن قمت بإعادة إنشاء كل شيء: المستخدم، قاعدة البيانات، الأذونات للمستخدم/الدور (بما في ذلك ALTER DEFAULT PRIVILEGES FOR ROLE discourse IN SCHEMA public GRANT ALL ON TABLES TO “discourse”؛ لمطابقة الجداول التي أنشأها هذا المستخدم في المستقبل)
اكتمل البناء ويعمل المثيل بشكل جيد مع خادم postgres البعيد، لذا فهو جاهز لاستيراد النسخة الاحتياطية من المثيل القديم.