フォーラムをマージする際の Пpoблем

こんにちは。

こちらのチュートリアルを使って、2つのフォーラムをマージしようとしています。

gunzip < /path/to/data/other-2018-08-02-134227-v2018xxx.tar.gz | psql -d copyme というコマンドで詰まっています。
実行すると、解読不能な文字のインポートエラーが多数表示されます。

実行した手順:

  • 公式の方法でVPSにDiscourseをインストール。
  • マージするバックアップ(forumother)をGUIでインポート。
  • 後者(最新バージョンのDiscourseのバックアップを持つため)のバックアップを作成。
  • 宛先フォーラム(forumdest)のバックアップをインポート。
  • forumotherのバックアップをSFTP経由で /var/discourse/shared/standalone/backups/default フォルダにインポート。

その後、上記のフォルダに移動し、tar xvzf forumother.tar.gz(バックアップの実際の名前で)コマンドを実行します。

cd /var/discourse に移動し、./launcher enter app を実行します。

sudo -u postgres psql を実行し、CREATE DATABASE "copyme" ENCODING = 'utf8'; を実行してから q で終了します。

ここで詰まっています。
gunzip < public/backups/default/forumother.tar.gz | psql -d copyme コマンドがそのままでは機能しません。
エラーは psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: role "root" does not exist です。

これは接続の問題であることはわかりますが、解決方法がわかりません。

Postgresユーザーとしてログイン su - postgres してからコマンド gunzip ... を実行してみましたが、その際にコマンドの出力が完全に不整合になりました。

postgres@testforum-app:~$ gunzip < /var/www/discourse/public/backups/default/forum-francophon
e-home-assistant-2022-04-24-120337-v20220407195246.tar.gz | psql -d copyme3
invalid command \W
... (エラーメッセージの残りは省略)

フォーラムで検索してみましたが、これに関する情報は見つかりませんでした。

そこで、皆様の助けを借りたく思います。よろしくお願いします。

追伸:私の英語はあまり良くないので、フォーラムで検索するために適切な言葉を使っていないか、あるいは最初に引用したチュートリアルを誤解している可能性があります。

おそらく、psql は現在のシステムユーザー (root) を使用しようとしていますが、Postgres には存在しません。psql を実行するときにユーザーを指定する必要があるかもしれません: psql -U postgres

そして、この手順を確認してください。

「いいね!」 6

ありがとうございます。今夜試してみて、結果をまたお知らせします。

「いいね!」 1

こんにちは、

まず、ご協力いただきありがとうございます。回答は少し長くなりますが、実行した手順を詳しく説明します。

Ben、前回のメッセージ以降、数回試しましたが、認証エラーが常に発生し、gunzip < blabla コマンドを実行できません。

discourse@testforum-app:/var/www/discourse$ gunzip < public/backups/default/forum-francophone-home-assistant-2022-04-24-120337-v20220407195246.tar.gz | psql -U postgres -d copyme
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: Peer authentication failed for user "postgres"

実行した手順を以下に示します。

  • 公式のクリーンインストールから開始しました。

  • 2つのバックアップは、最新バージョンの Discourse で作成しました。

  • 「forumDest」バックアップをインポートして復元します。

  • 「ForumOther」バックアップを /var/discourse/shared/standalone/backups/default にアップロードします。

  • SSH で接続します。

  • cd /var/discourse に移動します。

  • ./launcher enter app コマンドでコンテナに入ります。
    /var/discourse/shared/standalone/backups/default にある「ForumOther.tar.gz」アーカイブを解凍します。

  • パスワードをリセットします。

root@testforum-app:/var/www/discourse/public/backups/default# ls
dump.sql.gz
forum-francophone-home-assistant-2022-04-24-120337-v20220407195246.tar.gz
home-assistant-communaute-francophone-2022-04-24-111032-v20220304162250.tar.gz
uploads

ls コマンドの結果は次のとおりです。forum-francophone-home-assistant-2022-04-24-120337-v20220407195246.tar.gzForumOther で、home-assistant-communaute-francophone-2022-04-24-111032-v20220304162250.tar.gzForumDest です。

以下のコマンドで postgres のパスワードをリセットしました。

sudo -u postgres psql
\password postgres
(新しいパスワードを入力)
\q

これにより、次のようになります。

root@testforum-app:/var/www/discourse/public/backups/default# sudo -u postgres psql
psql (13.6 (Debian 13.6-1.pgdg110+1))
Type "help" for help.

postgres=# \password postgres
Enter new password for user "postgres":
Enter it again:
postgres=# \q
  • 「copyme」データベースの作成
root@testforum-app:/var/www/discourse/public/backups/default# su postgres
postgres@testforum-app:/var/www/discourse/public/backups/default$ psql
psql (13.6 (Debian 13.6-1.pgdg110+1))
Type "help" for help.
postgres=# CREATE DATABASE "copyme2" ENCODING = 'utf8';
CREATE DATABASE
postgres=# \q
postgres@testforum-app:/var/www/discourse/public/backups/default$
  • postgres@testforum-app:/var/www/discourse/public/backups/default$ gunzip < forum-francophone-home-assistant-2022-04-24-120337-v20220407195246.tar.gz | psql -d copyme コマンドを実行します。
    または、言及されているように gunzip < forum-francophone-home-assistant-2022-04-24-120337-v20220407195246.tar.gz | psql -U postgres -d copyme

プロセスの開始部分は見えませんが、最後に常に次のように表示されます。

invalid command \P�jvsחP�m���q��J[B���@$��W�t*����!&|Zz)��)��Q�6�AJ�Y��%!/6=�JR��J��BPþ�A�)�YTZ�j��=! M��^bCO)+mi9���u�p�E��a��50��E�y��P���і��TxȐ��OȾ����B�)Wl��Ad�������:���}1���,kNDo�O�'�)G��^W����5��
                                                                                                                                                                                                        :��B�eIx7!N��;q�À@�#j���*
invalid command \�6���`�3�
invalid command \�2��󟯹�Ψ�)��V��D��4{]�
ERROR: invalid byte sequence for encoding "UTF8": 0x89
postgres@testforum-app:/var/www/discourse/public/backups/default$

エンコーディングに問題があるということでしょうか?

試したこと:
コマンドの分離:

  • ForumOther バックアップの解凍 gunzip < forum-francophone-home-assistant-2022-04-24-120337-v20220407195246.tar.gz。これは、理解不能な言語で何かを抽出しているようです。
  • DB への接続 psql -d copyme
postgres@testforum-app:/var/www/discourse/public/backups/default$ psql -d copyme
psql (13.6 (Debian 13.6-1.pgdg110+1))
Type "help" for help.

copyme=#

しかし、「copyme」データベースに接続しても、何をすればよいかわかりません。

IMPORT コマンドについては以下を確認しましたが、同じく、どこで実行すればよいですか?どのようにすればよいですか?どのユーザーで実行すればよいですか?

段階的に試してみましょう。

成功したら、元のチュートリアル(主な原則を説明し、存在する価値がある)よりも少し詳しく手順を説明します。

お時間とご協力、重ねて感謝いたします。

皆さん、こんにちは。

問題は順調に進んでいます。

インポートスクリプトが実行される直前で詰まっています。

bundle install を実行し、次に IMPORT=1 bundle install を実行すると、このエラーが発生します。

tiny_tds(2.1.5) のインストール中にエラーが発生し、Bundler は続行できません。

フルコマンド IMPORT=1 DB_NAME=copyme DB_PASS=password SOURCE_BASE_URL= UPLOADS_PATH=/var/www/discourse/public/uploads/default bundle exec ruby script/bulk_import/discourse_merger.rb を実行します。

今回は、このエラーが発生します。

gitソース https://github.com/nlalonde/ruby-bbcode-to-md はまだチェックアウトされていません。
アプリケーションの起動を試みる前に `bundle install` を実行してください。

何かアイデアはありますか?
よろしくお願いします。

こんにちは。

フォーラムのマージという目標に向けた、もう一つの前進です。

依存関係の問題はなくなりましたが、スクリプトの実行時に権限の問題が発生しているようです。

Discourse の公式インストール環境で、ローカルデータベースを使用してスクリプトを実行しています。

実行したスクリプトのコマンドと、その結果は以下の通りです。

discourse@testforum-app:/var/www/discourse$ IMPORT=1 DB_NAME=copyme DB_PASS=hacf2022 SOURCE_B
exec ruby script/bulk_import/discourse_merger.rb                                             
Loading application...                                                                       
Traceback (most recent call last):                                                           
        3: from script/bulk_import/discourse_merger.rb:817:in `<main>'                       
        2: from script/bulk_import/discourse_merger.rb:817:in `new'                          
        1: from script/bulk_import/discourse_merger.rb:21:in `initialize'                    
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-7.0.2.4/lib/active_record/dynam
e:Class (NoMethodError)
Did you mean?  connection_db_config                                                          
               connection_pool                                                               
               connection_class                                                              
               connection_class?                                                             
               connection_class=                                                             

よろしくお願いします。

(他の人にも役立つかもしれないので)実行したコマンドも添付します。

other.forum.backup/var/discourse/shared/standalone/backups/default にアップロードし、tar xvzf other.forum.backup.tar.gz で展開します。

cd `/var/discourse
./laucher enter app
su postgres
psql
CREATE DATABASE "copyme" ENCODING = 'utf8';
\password postgres
\q
exit
su discourse
gunzip < public/backups/default/dump.sql.gz | psql -d copyme
exit

依存関係の nano, sqlite3, mysql2 をインストールします。
root ユーザーで

apt update && apt upgrade
apt-get install -y nano sqlite3 libsqlite3-dev mariadb-server libmariadb-dev
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

Tiny_tds のインストール
Tiny_tds をインストールするには FreeTDS が必要です。

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

tiny_tds のために

gem install tiny_tds
gem install ruby-bbcode-to-md

スクリプトの実行

su discourse
bundle config unset deployment
IMPORT=1 bundle install
IMPORT=1 DB_NAME=copyme DB_PASS=passpostgres SOURCE_BASE_URL=http://other.forum.fr UPLOADS_PATH=/var/www/discourse/public/uploads/default bundle exec ruby script/bulk_import/discourse_merger.rb
「いいね!」 1

タイミングが悪かったようですね。11日前にDiscourseをRails 7にアップグレードするコミットがありました。インポートスクリプトは ActiveRecord::Base.connection_config メソッドを使用していますが、これはRails 7.0.0rc1で削除されました。

@loic アップグレード時にインポートスクリプトが見落とされた可能性があります。

「いいね!」 1

ありがとうございます。

これは素晴らしいニュースです。どこから来ているのか分からなかったからです。

マージスクリプトを自分で更新できない限り、アップデートを待ちます。

ありがとうございます。

「いいね!」 1

PRを開きました。すぐにマージされるはずです :slight_smile:

「いいね!」 3

こんにちは。

フォローアップと迅速な対応、誠にありがとうございます。

2つのフォーラムの移行は、多くの落とし穴がある長い道のりですので、再び問題に直面しています。
discourse_merge.rb ファイルに変更を加え、コマンドを再実行しました。

既存の HASH で問題が発生しています。

重複の問題であることは理解していますが、どのような性質の重複でしょうか?

試しのために、重複ユーザーを削除し、名前を変更しようとしましたが、今度はこのトークン問題が発生しています(ユーザーレベルでの重複は処理されると考えていましたが?)。

重ねて、ご協力ありがとうございます。

discourse@testforum-app:/var/www/discourse$ IMPORT=1 DB_NAME=copyme DB_PASS=password SOURCE_BASE_URL=http://other.forum.fr UPLOADS_PATH=/var/www/discourse/public/uploads/default bundle exec ruby script/bulk_import/discourse_merger.rb
Loading application...
Starting...
Preloading I18n...
Fixing highest post numbers...
Loading imported group ids...
Loading imported user ids...
Loading imported category ids...
Loading imported topic ids...
Loading imported post ids...
Loading groups indexes...
Loading users indexes...
Loading categories indexes...
Loading topics indexes...
Loading posts indexes...
Loading post actions indexes...

merging users...
copying email_tokens...
Traceback (most recent call last):
        7: from script/bulk_import/discourse_merger.rb:817:in `<main>'
        6: from script/bulk_import/discourse_merger.rb:71:in `start'
        5: from /var/www/discourse/script/bulk_import/base.rb:100:in `run'
        4: from script/bulk_import/discourse_merger.rb:82:in `execute'
        3: from script/bulk_import/discourse_merger.rb:145:in `copy_user_stuff'
        2: from script/bulk_import/discourse_merger.rb:445:in `copy_model'
        1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.3.5/lib/pg/connection.rb:262:in `copy_data'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.3.5/lib/pg/connection.rb:262:in `get_last_result': ERROR:  duplicate key value violates unique constraint "index_email_tokens_on_token_hash" (PG::UniqueViolation)
DETAIL:  Key (token_hash)=(07165399523fcdce0679e45950f0260b61386a5c886e3e68fa6cf047d84d1caf) already exists.
CONTEXT:  COPY email_tokens, line 1

こんにちは。

いくつかの問題がありましたが、この移行を完了しました。

最後の問題は、2つのフォーラムで異なるプライマリ アドレスを持つ登録ユーザー、および一方のフォーラムでのテーブルの欠落によるものでした。

時間があるときに、完全な手順をここに掲載します。

@Constanza_Abarca さん、ご協力ありがとうございました。

「いいね!」 1

これは、2つのインスタンスが異なるバージョンで実行されていた、または異なるプラグインがインストールされていたことを意味しますか?もし私が自分でこのようなマージを行うとしたら、まず最初に以下を行うべきだと期待します。

  • 両方のバックアップを取得する
  • 両方が同じバージョンのDiscourseを実行していることを確認する
  • ターゲットにソースと同じプラグインがすべてインストールされていることを確認する
  • (オプション?)ソースにターゲットと同じプラグインがすべてインストールされていることを確認する
  • 再度バックアップを取得する
「いいね!」 3

こんにちは。

2つのフォーラムは同じバージョンですが、プラグインは同じではない可能性があります。

これらは手作業で加えた小さな変更にすぎません。

実際の統合については、インストールされているプラグインで試してみます。