مشكلة PG::ConnectionBad عند دمج منتديين على الرغم من عدة نجاحات سابقة

أهلاً،

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

بعد اتباع الإجراء الخاص بي في ذلك الوقت، واجهت خطأ في الاتصال بـ Postgres، عند تشغيل سكربت الدمج.

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

شكراً مقدماً.

هذا هو الخطأ:

discourse@serveur-app:/var/www/discourse$ IMPORT=1 DB_NAME=copyme DB_PASS=passwdDB SOURCE_BASE_URL=http://old.forum.fr UPLOADS_PATH=/var/www/discourse/public/uploads/default bundle exec ruby script/bulk_import/discourse_merger.rb
Loading application...
Traceback (most recent call last):
	5: from script/bulk_import/discourse_merger.rb:817:in `<main>'
	4: from script/bulk_import/discourse_merger.rb:817:in `new'
	3: from script/bulk_import/discourse_merger.rb:22:in `initialize'
	2: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.4.2/lib/pg.rb:69:in `connect'
	1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.4.2/lib/pg/connection.rb:661:in `new'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.4.2/lib/pg/connection.rb:708:in `connect_to_hosts': could not match 0 port numbers to 1 hosts (PG::ConnectionBad)


أغتنم هذه الفرصة لوضع إجراء الدمج الكامل.

يعتمد هذا الإجراء على الموضوع الأصلي و المشاكل التي تمت مواجهتها أثناء اختباراتي

نجح هذا الإجراء في أبريل (انظر هذا الموضوع).

  • ابدأ بنسخ احتياطية محدثة للمنتديين،
  • قم بتثبيت discourse،
  • قم باستيراد النسختين الاحتياطيتين،
  • قم باستعادة المنتدى المراد الاحتفاظ به.

عبر SSH:

  • انتقل إلى مجلد /var/discourse
  • أدخل التطبيق ./launcher enter app.

إنشاء قاعدة البيانات

su postgres
psql
CREATE DATABASE copyme ENCODING='utf8';

تغيير كلمة مرور المستخدم postgres

\password postgres

الخروج من postgres

\q

الخروج من مستخدم postgres

exit

التبديل إلى مستخدم discourse

su discourse

فك ضغط النسخة الاحتياطية للمنتدى القديم
انتقل إلى المجلد الأخير cd public/backups/default
قم بفك ضغط النسخة الاحتياطية القديمة عبر الأمر tar xvzf old.forum.tar.gz

نسخ من BDD.lu إلى BDD copyme.

gunzip < dump.sql.gz | psql -d copyme

الخروج من مستخدم discourse

exit

التبعيات

تبعيات nano، sqlite3 و mysql2
(مع المستخدم الجذر في /var/www/discourse)

apt update && apt upgrade -y
apt-get install -y nano sqlite3 libsqlite3-dev mariadb-server libmariadb-dev -y
gem install sqlite3 mysql2

تحويل ruby bbcode إلى md

git clone https://github.com/nlalonde/ruby-bbcode-to-md.git
cd ruby-bbcode-to-md/
gem build ruby-bbcode-to-md.gemspec
gem install ruby-bbcode-to-md-*.gem
cd ../

تثبيت Tiny_tds
يجب عليك تثبيت FreeTDS ثم Tiny_tds.
بالنسبة لـ FreeTDS:

wget http://www.freetds.org/files/stable/freetds-1.3.12.tar.gz
tar -xzf freetds-1.3.12.tar.gz
cd freetds-1.3.12
./configure --prefix=/usr/local --with-tdsver=7.3
make
make install

بالنسبة لـ Tiny_tds:

gem install tiny_tds
gem install ruby-bbcode-to-md
cd ../

السكربت

su discourse
bundle config unset deployment
IMPORT=1 bundle install
IMPORT=1 DB_NAME=copyme DB_PASS=passwdDB SOURCE_BASE_URL=http://old.forum.fr UPLOADS_PATH=/var/www/discourse/public/uploads/default bundle exec ruby script/bulk_import/discourse_merger.rb

تمت الترجمة بواسطة www.DeepL.com/Translator (الإصدار المجاني)
إعجاب واحد (1)

مرحباً،

يستخدم Postgres المنفذ 5432 (تحقق عبر \\conninfo في أمر psql)، ولكني أخشى أن الملف connection.rb يستدعي المنفذ 5433.

كلمة المرور جيدة وتم التحقق منها باستخدام الأمر psql postgres://postgres:password@127.0.0.1:5432

هل يمكن لأي شخص تأكيد عدم وجود خطأ في المنفذ؟

شكراً مقدماً

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

لقد واجهت نفس الخطأ. يبدو أن المنفذ لا يتم تحميله في تكوينات قاعدة البيانات هنا: discourse/script/bulk_import/discourse_merger.rb at main · discourse/discourse · GitHub

إذا قمت بتشغيل ذلك من وحدة تحكم rails:

[1] pry(main)> ActiveRecord::Base.connection_db_config.configuration_hash
=> {:prepared_statements=>false,
 :adapter=>"postgresql",
 :database=>"discourse_development",
 :min_messages=>"warning",
 :pool=>5,
 :timeout=>5000,
 :checkout_timeout=>5,
 :advisory_locks=>false,
 :host_names=>["localhost"],
 :variables=>{}}

المنفذ ليس في التكوين، لكن الكود يفترض أنه موجود: discourse/script/bulk_import/discourse_merger.rb at main · discourse/discourse · GitHub

بينما تم إصلاح هذا في النواة، يمكنك وضع المنفذ يدويًا، لذا بدلاً من

@raw_connection = PG.connect(dbname: local_db[:database], host: 'localhost', port: local_db[:port], user: 'postgres', password: db_password)

استخدم:

@raw_connection = PG.connect(dbname: local_db[:database], host: 'localhost', port: 5432, user: 'postgres', password: db_password)
إعجاب واحد (1)

شكرا شكرا شكرا

لقد جربت المنفذ = 5432 ولكن ليس المنفذ = 5432

بسبب وضع رؤوسنا في المقاود نفوت الأشياء

شكرا مرة أخرى

إعجابَين (2)

شكرا @McFly على تجميع دليل كامل. هذا مفيد. هل يمكن أتمتة كل هذه الخطوات؟ وإنشاء مهمة cron لها؟

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

مرحباً،

مع العلم أن هذا ليس خطأً يجب تكراره عادةً، لا أعرف ما إذا كان سيكون مفيدًا.

إعجابَين (2)

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