عاجل، فشل الـ build المُرقّى UniqueViolation

لقد حاولت ترقية Discourse وحصلت على الرسالة التالية -

I, [2021-01-21T18:39:25.045454 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
2021-01-21 18:39:32.724 UTC [4051] discourse@discourse LOG:  duration: 336.116 ms  statement: UPDATE users
	SET locale = 'en_GB'
	WHERE locale = 'en'
	
2021-01-21 18:39:33.373 UTC [4051] discourse@discourse ERROR:  duplicate key value violates unique constraint "index_users_on_username_lower"
2021-01-21 18:39:33.373 UTC [4051] discourse@discourse DETAIL:  Key (username_lower)=(xyz123) already exists.
2021-01-21 18:39:33.373 UTC [4051] discourse@discourse STATEMENT:  UPDATE users
	SET locale = 'en'
	WHERE locale = 'en_US'
	
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

لقد حاولت تنفيذ ./launcher enter app ثم su postgres -c 'psql discourse'، وحصلت على الخطأ التالي -

psql: error: could not connect to server: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket “/var/run/postgresql/.s.PGSQL.5432”?

هل لديك أي فكرة @merefield؟ شكرًا لك!

مرحبًا.

عند فشل الترقية، يُترك الحاوي متوقفًا. (حاول الاتصال بموقعك عبر المتصفح وستلاحظ أن هذا هو الحال)

لذلك، قد يكون الأمر ببساطة أنك لم تشغّل أحدث حاوي يعمل. (قبل الترقية)

قم بذلك عبر ./launcher start app، ثم ادخل الحاوي وحاول الدخول إلى واجهة سطر أوامر قاعدة البيانات.

شكرًا لك، لقد قمت بإعادة تشغيل الحاوية، هل لديك أي أفكار؟ جربت أمر ./launcher enter app، هل هناك أي شيء آخر يمكنني تجربته؟

ubuntu@:/var/discourse$ ./launcher start app
تحذير: إصدار Docker 17.05.0-ce غير مدعوم …
لا يوجد شيء يجب فعله، فقد تم تشغيل الحاوية بالفعل!

هل واجهت خطأً عند إدخال الحاوية؟

لا توجد أخطاء، ولكن عند تنفيذ الأمر ./launcher logs app، حصلت على ما يلي:

ok: run: redis: (pid 47) 918s
timeout: down: postgres: 1s, normally up, want up
ok: run: redis: (pid 47) 925s
timeout: down: postgres: 0s, normally up, want up
ok: run: redis: (pid 47) 933s
ok: run: postgres: (pid 1855) 0s
supervisor pid: 1847 unicorn pid: 1857
config/unicorn_launcher: line 71: kill: (1857) - لا توجد عملية بهذا المعرف
config/unicorn_launcher: line 15: kill: (1857) - لا توجد عملية بهذا المعرف
(1847) exiting
ok: run: redis: (pid 47) 938s
timeout: down: postgres: 0s, normally up, want up
ok: run: redis: (pid 47) 945s

ما هي نتيجة ps -ef | grep postgres؟

root 38 35 0 19:09 ? 00:00:00 runsv postgres
root 46 38 0 19:09 ? 00:00:00 svlogd /var/log/postgres
root 2573 2571 0 19:31 ? 00:00:00 sv start postgres
root 2575 2497 0 19:31 ? 00:00:00 grep postgres

هل يجب تشغيله داخل الحاوية أم على جهاز لينكس مباشرة؟

داخليًا. يبدو أنه غير قيد التشغيل.

ستحتاج على الأرجح إلى إعادة تشغيله يدويًا باسم مستخدم postgres.

هل تعرف الأمر السريع لإعادة تشغيله؟

يمكنك تجربة:

su - postgres /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main - باستبدال 13 بالإصدار الحالي لديك.

وهو الأمر المعلن عنه في عملية التثبيت السليم.

ولكن لا توجد ضمانات مع ذلك، إذ لم أجربه!

لا، لا تتعب نفسك في القيام بذلك، انظر أدناه.

شكرًا لك. لدي الإصدار 12، لكنني حصلت على الخطأ التالي -

su: خيار غير صالح – ‘D’
جرب ‘su --help’ للحصول على مزيد من المعلومات.

الخيار -D هو خيار صالح.

تأكد من أنك لم تدرج الشرطة المائلة خارج مقتطف الكود؟

بالمناسبة، أتساءل ما إذا كانت عملية الترقية إلى الإصدار 13 قد فشلت. إذا كان الأمر كذلك، فقد ترغب في الاطلاع على هذا الموضوع ونشر تعليق فيه: PostgreSQL 13 update

نعم، ما زلت أعمل على الإصدار 12…

عذرًا، يبدو أن هذه العملية مُغلّفة وتدار بواسطة عملية ذات مستوى أعلى.

إذا قمت بقتل نسختي، فإنها تعيد تشغيل نفسها تلقائيًا.

جرب: sv start postgres

بصلاحيات الجذر (root)

هل تقصد تشغيله داخل حاوية Docker؟ شكرًا لك.

نعم، هذا هو المكان الذي يعمل فيه الخدمة.

الأفضل من ذلك، قم بما يلي: sv restart postgres

ثم تحقق من:

tail /var/log/postgres/current

الحالة الصحية ستبدو تقريبًا كالتالي:

2021-01-21 20:21:10.284 UTC [575368] LOG: database system is ready to accept connections في مكان ما هناك.

إليك سجل الأخطاء -

root@ip–app:/var/www/discourse# cat /var/log/postgresql/postgresql-12-main.log
2021-01-21 18:12:04.965 UTC [623] FATAL: ملفات قاعدة البيانات غير متوافقة مع الخادم
2021-01-21 18:12:04.965 UTC [623] DETAIL: تم تهيئة دليل البيانات بواسطة إصدار PostgreSQL 13، وهو غير متوافق مع هذا الإصدار 12.3 (Debian 12.3-1.pgdg100+1).
pg_ctl: تعذر بدء تشغيل الخادم
تفحص مخرجات السجل.