新しいホストに復元

新しいホストをセットアップして「ステージング」環境を構築しました。バージョンも同じはずの Discourse インストールを再作成しました。実行中のバージョンは 2.8.2 です。

最初のコメントですが、バージョン 2.8.2 時点でバックアップサイズが 282MB から約 90MB に減少しました。理由は不明ですが、活用できるインテリジェンスが追加されているので、これを利用します。

フォーラムから最新のアーカイブをダウンロードし、新しいステージング環境のローカルストレージにアップロードしました。

リストアは以下の理由で失敗します。

[2022-02-27 19:41:18] ALTER TABLE
[2022-02-27 19:41:18] ALTER TABLE
[2022-02-27 19:41:18] データベースを移行中...
[2022-02-27 19:43:00]
[2022-02-27 19:43:00] データベースに再接続中...
[2022-02-27 19:43:00] サイト設定をリロード中...
[2022-02-27 19:43:00] 非スタッフユーザー向けの送信メールを無効化中...
[2022-02-27 19:43:02] 読み取り専用モードを無効化中...
[2022-02-27 19:43:02] カテゴリキャッシュをクリア中...
[2022-02-27 19:43:02] 翻訳をリロード中...
[2022-02-27 19:43:02] アップロードを再マッピング中...
[2022-02-27 19:43:02] 'https://forum.geekbeacon.org' を 'https://forum-staging.geekbeacon.org' に再マッピング中
[2022-02-27 19:43:08] アップロードをリストア中。これには時間がかかる場合があります...
[2022-02-27 19:43:36] 例外: 8 件の投稿が新しい S3 アップロード URL に再マッピングされていません。S3 移行がデータベース 'default' で失敗しました。
[2022-02-27 19:43:36] /var/www/discourse/lib/file_store/to_s3_migration.rb:132:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:87:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:373:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:66:in `migrate'
/var/www/discourse/lib/file_store/s3_store.rb:317:in `copy_from'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:62:in `restore_uploads'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:44:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:61:in `run'
/var/www/discourse/script/spawn_backup_restore.rb:23:in `restore'
/var/www/discourse/script/spawn_backup_restore.rb:36:in `block in <main>'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `fork'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `<main>'
[2022-02-27 19:43:36] ロールバックを試行中...
[2022-02-27 19:43:36] ロールバック中...
[2022-02-27 19:43:36] クリーンアップ中...
[2022-02-27 19:43:36] discourse_functions スキーマから関数を削除中...
[2022-02-27 19:43:36] tmp '/var/www/discourse/tmp/restores/default/2022-02-27-194051' ディレクトリを削除中...
[2022-02-27 19:43:36] サイドキックのポーズ解除中...
[2022-02-27 19:43:36] リストアを完了としてマーク中...
[2022-02-27 19:43:36] リストア終了を 'csgeek' に通知中...

「いいね!」 1

これがあなたの問題です。同じS3バケットを使用し、同じバケットを使用しますか?「バックアップでS3をダウンロードする」のような名前の非表示設定がオンになっていることを確認してください。設定名については、ソースを検索または確認する必要があります。

または、本番サイトの他のアップロードがS3上にあることを確認する必要があるかもしれません。

「いいね!」 1

S3が設定されていません。古いサーバーには、有効なS3の場所にマッピングされていない古いデータがあるのかもしれません。

古いサーバーに戻ると、2つのバケットが設定されています。1つはバックアップ用、もう1つはメディア用です。ガイドに従ってAWS S3とCDNを設定しました。

rake uploads:migrate_to_s3 を実行したところ失敗しました。その後 posts:rebake を実行したところ、エラーの数は減りましたが、まだ失敗しています。

S3への移行は現在元に戻せません。
[CTRL+c] でキャンセル、[ENTER] で続行

'default' のアップロードをS3に移行中...
ファイルをS3にアップロード中...
 - ローカルファイルをリスト表示
 => 208 ファイル
 - S3ファイルをリスト表示
. => 978 ファイル
 - ファイルをS3に同期
................................................................................................................................................................................................................
データベース内のURLを更新中...
古い最適化画像を削除中...
ライトボックスを含むすべての投稿にリベイクのフラグを立てています...
15 件の投稿にリベイクのフラグが立てられました
rake aborted!
FileStore::ToS3MigrationError: 1 件の投稿が新しいS3アップロードURLにリマップされていません。'default' のDBのS3移行に失敗しました。
/var/www/discourse/lib/file_store/to_s3_migration.rb:132:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:87:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:373:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:66:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:123:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:102:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-4.0.0/lib/rails_multisite/connection_management.rb:80:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-4.0.0/lib/rails_multisite/connection_management.rb:90:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:100:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:96:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => uploads:migrate_to_s3
(フルトレースを表示するには、タスクを --trace オプション付きで実行してください)

migrate_to_s3 を詳細モードで実行して、原因となっている投稿を特定する方法はありますか?

私も同じ問題を抱えています。S3バケットを変更せずにmyserverを移行しています。
何か提案はありますか?

リストアが次のようなエラーで失敗していますか?

FileStore::ToS3MigrationError: 1件の投稿が新しいS3アップロードURLに再マッピングされていません。db 'default' のS3移行が失敗しました。

その場合、最善の対処法は、アップロードが間違った場所にある投稿を修正することです。しかし、そのテストが偽陽性を示す場合があると思います。その場合は、タスクを一時停止するためのスイッチをrakeタスクで使用して、手動で修正できるようにすることができます。すぐにそれを見つけることができず、あるべき場所である Backup discourse from the command line にもありません。今、別の作業の途中なので、すぐには見つけられません。

はい、私もこのようなエラーが発生しています

EXCEPTION: 3件の投稿が新しいS3アップロードURLに再マッピングされていません。'default’データベースのS3移行が失敗しました

以下をお試しいただけます

discourse restore --pause filename

これによりリストアが一時停止され、別のターミナルでデータベースをいじって修正できます。あるいは、そのチェックを行う前に停止できるはずです。

コマンドラインでのリストア中にこれを使用する必要があると思います

同じエラーです。
S3へのファイルアップロード中…

  • ローカルファイルのリストアップ
    => 2 ファイル
  • S3ファイルのリストアップ
    … => 183549 ファイル
  • S3へのファイル同期中
    ..
    データベース内のURLを更新中…
    古い最適化された画像を削除中…
    ライトボックスを含むすべての投稿に再ベイクのフラグを設定中…
    169809 件の投稿に再ベイクのフラグが設定されました
    例外: 3 つの投稿が新しい S3 アップロード URL に再マップされていません。db ‘default’ の S3 移行に失敗しました。
    /var/www/discourse/lib/file_store/to_s3_migration.rb:132:in raise_or_log' /var/www/discourse/lib/file_store/to_s3_migration.rb:81:in migration_successful?’
    /var/www/discourse/lib/file_store/to_s3_migration.rb:385:in migrate_to_s3' /var/www/discourse/lib/file_store/to_s3_migration.rb:59:in migrate’
    /var/www/discourse/lib/file_store/s3_store.rb:367:in copy_from' /var/www/discourse/lib/backup_restore/uploads_restorer.rb:69:in restore_uploads’
    /var/www/discourse/lib/backup_restore/uploads_restorer.rb:49:in restore' /var/www/discourse/lib/backup_restore/restorer.rb:179:in restore_uploads’
    /var/www/discourse/lib/backup_restore/restorer.rb:72:in run' script/discourse:243:in restore’
    /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor/command.rb:28:in run' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor/invocation.rb:127:in invoke_command’
    /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor.rb:538:in dispatch' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor/base.rb:584:in start’
    script/discourse:397:in <top (required)>' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in load’
    /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in kernel_load' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:23:in run’
    /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:452:in exec' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/command.rb:28:in run’
    /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in invoke_command' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor.rb:538:in dispatch’
    /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:35:in dispatch' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/base.rb:584:in start’
    /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:29:in start' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/exe/bundle:28:in block in <top (required)>’
    /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/friendly_errors.rb:117:in with_friendly_errors' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/exe/bundle:20:in <top (required)>’
    /usr/local/bin/bundle:25:in load' /usr/local/bin/bundle:25:in
    ロールバックを試行中…
    ロールバック中…
    クリーンアップ中…
    discourse_functions スキーマから関数を削除中…
    tmp ‘/var/www/discourse/tmp/restores/default/2026-01-13-145033’ ディレクトリを削除中…
    sidekiq の一時停止を解除中…
    リストアが終了したことをマーク中…
    リストア終了を ‘system’ に通知中…
    完了!

その3つのアップロードを修正するか、チェックが実行される前にリストアを停止する必要があります。

168000件の中から3件をどのように見つけることができますか?

この検証をスキップしてリストアを停止することは可能ですか?

そのテストを行うコードを見て、同じクエリを実行してみるでしょう。以前にそのためのコードを投稿したかもしれません。

私は以下を投稿しました

それを実行しましたか?リストアが完了した後でCtrl+Cを押すだけで済むかもしれません。データベースのみのリストアを行っていますか?

しまった、データベースとアップロードの間にリストアを停止することを考えていませんでした。
S3からアップロードを移動する必要はありません。フロントエンドとデータベースだけを移行できますか?

投稿を停止し、問題のある投稿を特定できるオプションを教えていただけますか?大変助かります。

何か提案はありますか?ありがとうございます。