فشل تشغيل “./launcher rebuild app” عند db:migrate. لاحظ أننا نستخدم PostgreSQL v12.
لقد أدى هذا إلى تدمير منتدياتنا. عاد حاوية docker مرة أخرى، لكن المنتدى لم يعد. لحسن الحظ، قمت بأخذ لقطة من جهاز افتراضي قبل الترقية، وأقوم الآن باستعادتها.
السجل:
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
I, [2022-04-14T15:20:51.896917 #1] INFO -- : == 20220304162250 EnableUnaccentExtension: migrating =========
-- enable_extension("unaccent")
I, [2022-04-14T15:20:51.897218 #1] INFO -- : Terminating async processes
I, [2022-04-14T15:20:51.897265 #1] INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/12/bin/postmaster -D /etc/postgresql/12/main pid: 1710
I, [2022-04-14T15:20:51.897396 #1] INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 1827
2022-04-14 15:20:51.897 UTC [1710] LOG: received fast shutdown request
1827:signal-handler (1649949651) Received SIGTERM scheduling shutdown...
2022-04-14 15:20:51.900 UTC [1710] LOG: aborting any active transactions
2022-04-14 15:20:51.902 UTC [1710] LOG: background worker "logical replication launcher" (PID 1719) exited with exit code 1
2022-04-14 15:20:51.904 UTC [1714] LOG: shutting down
1827:M 14 Apr 2022 15:20:51.913 # User requested shutdown...
1827:M 14 Apr 2022 15:20:51.914 * Saving the final RDB snapshot before exiting.
2022-04-14 15:20:51.965 UTC [1710] LOG: database system is shut down
1827:M 14 Apr 2022 15:20:53.157 * DB saved on disk
1827:M 14 Apr 2022 15:20:53.157 # Redis is now ready to exit, bye bye...
FAILED
--------------------
Pups::ExecError: cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 2118 exit 1>
Location of failure: /usr/local/lib/ruby/gems/2.7.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
2dcd9aeca614c9e06ef748f673eb68203db6eae5c445253b416d666663879d6d
==================== END REBUILD LOG ====================
Failed to rebuild app.
أصبحت هذه الإضافة متاحة كإضافة “موثوقة” على PostgreSQL 13+، حيث يمكن لأي مستخدم تمكينها.
نظرًا لأنك تستخدم إصدارًا أقدم من PostgreSQL، سيتعين عليك التحايل على ذلك عن طريق تثبيت وتمكين هذه الإضافة لمستخدم Discourse، وربما محاولة خداع Discourse لاعتبار هذه الإضافة مثبتة بالفعل. أو الانتقال إلى الإصدار المدعوم حاليًا من PostgreSQL.
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.10.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require': cannot load such file -- /var/www/discourse/lib/freedom_patches/schema_cache_concurrency.rb (LoadError)
بالتأكيد، كان هذا الملف مملوكًا لـ root:root وتم تعيين الأذونات إلى 0000. تغييرها إلى discourse:root و 644 لتتناسب مع الملفات الأخرى في هذا الدليل أعادنا إلى العمل. الحمد لله!
هل لديك أي فكرة كيف تم حذف/تغيير هذا الملف؟ إنه أيضًا بحجم 0 بايت، غريب جدًا.
root@forum-app:/shared/log/rails# ls -la /var/www/discourse/lib/freedom_patches/schema_cache_concurrency.rb
-rw-r--r-- 1 discourse root 0 Feb 10 17:41 /var/www/discourse/lib/freedom_patches/schema_cache_concurrency.rb
حاولت القيام بـ “الاستعادة إلى تثبيت نظيف”، لكنها لا تعمل، وPG لا تتعاون. حاولت الرجوع في إصدار discourse والعودة إلى PG12، لكنها تصبح بعد ذلك كرنفالًا من الضوء مع جميع المكونات الإضافية.
نعم، لقد قمت بتغيير القالب، كجزء من استراتيجية “حسناً، هذا لا يعمل” حتى أتمكن من العودة إلى PG12 (على الرغم من أن هذا يجعلني أتساءل كيف سأقوم بترقية PG بعد ذلك ).
مرحباً، إذا كان لديك نسخة احتياطية من discourse، أقترح القيام بذلك على خادم مختلف لتجربته أولاً.
أعتقد أنك واجهت هذه المشكلة أثناء ترقية نسخة من discourse كانت تعمل بإصدار أقدم.
لذا، حاول تثبيت نسخة من discourse عن طريق تعديل ملف yml يدوياً لاستخدام “stable” من discourse وتثبيت إصدار postgres إلى 12.
إذا نجح البناء، حاول استعادة النسخة الاحتياطية. نأمل أن يتم استعادتها بنجاح.
إذا نجحت، قم بتغيير قالب postgres 12 مرة أخرى إلى قالب postgres الافتراضي وعلّق علامة stable بحيث يعاد بناء discourse بأحدث الاختبارات التي تم اجتيازها.
أعتقد أنه إذا كانت النسخة الاحتياطية قابلة للإنقاذ، فيجب أن تكون قادرة بعد ذلك على تحمل ترقيات postgres و discourse.
أنا عالق في “منطقة رمادية” في الوقت الحالي. جربت اقتراحك مع PG12 و"Stable". لم ينجح الأمر، ويتوقف الاستعادة ببساطة. لذلك، سأقوم بمسح الجهاز مرة أخرى لمحاولة البدء من جديد، لأنه الآن لن يقوم بإعادة بناء التطبيق.
بينما يحاول هذا الجهاز “العودة إلى PG12”، أحاول معرفة ما إذا كان بإمكاني المضي قدمًا في الجهاز الآخر: إذا حاولت ترقية PG بتثبيت جديد، فإنه يتعطل بعد Creating missing functions in the discourse_functions schema... (يبدأ في إرجاع 500) وtail -f shared/data/log/var-log/postgres/current يظهر أن حاوية البيانات “تتحرك”، على الرغم من أنها مليئة بـ “الأخطاء” مثل هذه:
discourse@discourse ERROR: relation "user_auth_tokens" does not exist at character 34
discourse@discourse STATEMENT: SELECT "user_auth_tokens".* FROM "user_auth_tokens" WHERE ((auth_token = 'XXXX=' OR
prev_auth_token = 'XXXX=') AND rotated_at > '2022-03-09 10:21:44.051357') LIMIT 1
discourse@discourse ERROR: relation "application_requests" does not exist at character 41
discourse@discourse STATEMENT: SELECT "application_requests"."id" FROM "application_requests" WHERE "application_requests"."date" = '2022-05-08' AND "application_requests"."req_type" = 0 LIMIT 1
ومع ذلك، قد يكون Discourse معطلاً، ولكن الجهاز يُستخدم، لذا… هل يعمل ولكنه يستغرق ساعات وساعات؟ لأنني تركته يعمل لمدة ساعة أو أكثر ولم يتغير شيء.
في هذه المرحلة، أفكر بالفعل فيما إذا كان هذا لا ينبغي أن يذهب هنا، هههه.
ملاحظة: لقد جربت نسختين احتياطيتين مختلفتين، حيث أنني أخذت نسختين قبل هذه المغامرة.
هذا ليس جيدًا - إذن لم تتمكن من استعادة النسخة الاحتياطية الخاصة بك من الإصدار القديم من Discourse باستخدام PG12 إلى إصدار جديد تمامًا مع PG13؟ هل يمكنك نشر رسائل الخطأ وما إلى ذلك؟ لقد أكد لي الجميع هنا مرارًا وتكرارًا أن ذلك سيعمل.