合并两个论坛时出现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 用户的密码

\postgres password

退出 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 依赖项
(以 root 用户在 /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 to 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 端口(可在 psql 命令中通过 \\conninfo 检查),但我担心 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 个赞

谢谢 谢谢 谢谢

我试过 port = 5432 但不是 port = 5432

因为我们把头放在车把上,所以我们会错过东西

再次感谢

2 个赞

感谢 @McFly 整理的完整指南。这很有帮助。所有这些步骤都可以自动化吗?并为此创建一个 cron 作业?

1 个赞

你好,

考虑到这通常不是一个需要重复的污点,我不知道这是否有用。

2 个赞

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