S3でのマルチサイトバックアップに関する問題--バックアップがルートに保存される

AWS EC2 上でマルチサイトインスタンスを使用しています。バックアップは次のように設定されています。

DISCOURSE_S3_BACKUP_BUCKET: lc-sitename
DISCOURSE_S3_SECRET_ACCESS_KEY: secret-key
DISCOURSE_S3_ACCESS_KEY_ID: key-id
DISCOURSE_BACKUP_LOCATION: s3

マルチサイトインスタンスのバックアップはバケットのルートに保存されていますが、UX のリストに表示されません。メインサイトのバックアップは、想定どおり default の下に保存されています。これは、バックアップがリストに表示されず、設定に従って削除されないことを意味します。

マルチサイトのスタンザは次のようになっています。

        site:
           adapter: postgresql
           database: site
           pool: 25
           timeout: 5000
           host: data
           password: secret
           host_names:
             - community.site.org

DISCOURE_USE_S3 が設定されていない場合、バックアップが間違った場所(バケットのルート)に保存される可能性がありますか?(discourse.confuse_s3 を設定しようとしましたが、unicorn を再起動せずにコマンドラインバックアップを実行したところ、サブサイトの名前ではなくルートに保存されました。)

S3 でアップロードに関する問題がありました(おそらくバケットの設定ミス)、そのため S3 はバックアップ専用です。

「いいね!」 1

さらに1時間半かけてしまいました。

マルチサイトのサイトの1つは、アップロード バックアップを正しいディレクトリに正しく配置していますが、2つはそうではありません。

正しく配置されていないものは、シングルサイトインスタンスからデータベースを復元したため、データベース内の何かが、バックアップをサイト名(またはデフォルトサイトのデフォルト)ではなく、バックアップフォルダのルートに強制しているのではないかと推測しています。

@gerhard、お手数をおかけしますが、私が何か明白な間違いを見落としているかどうか、簡単に確認していただけますでしょうか?

はい、アップロードストレージは設計によるものです。バックアップがシングルサイトインスタンスからのものであった場合、復元方法は異なります。

      was_multisite = BackupMetadata.value_for("multisite") == "t"
      upload_path = "/#{Discourse.store.upload_path}/"
      uploads_folder = was_multisite ? "/" : upload_path

しかし、これはバックアップがどこに置かれたかということについてであり、画像が復元される場所についてではなかったのではないでしょうか?

「いいね!」 1

はい。

その通りです。

しかし、おっと:

私が(正しく)以前に述べたように、このインスタンスは(現在?)バックアップのみにS3を使用しており、アップロードには使用していません。

バックアップがバックアップバケットのルートに配置されているのは、3つのサブサイトのうち2つのバックアップです。プライマリサイトは予想どおり default にプッシュしており、マルチサイトインスタンスの1つsitename ディレクトリにプッシュしています。

「いいね!」 1

うーん、それは奇妙な動作ですね。ブラウザからアップロードされたバックアップですか、それともシステムによって作成されたバックアップですか?

システムによって作成されたバックアップが間違った場所にある理由がわかりません。コードは非常にわかりやすいように見えます。

s3_helper は正しいバケットとマルチサイト名で設定されます。

Webインターフェイスまたはrakeタスクから、3つのマルチサイトホストのうち2つ(どちらも別のサーバーから移行されたもの)のバックアップを作成すると、バックアップが sitename/backupname の中ではなく、バックアップS3バケットのルートにアップロードされることを意味します。

私にとっても奇妙なことのように思えます。

これらの関数にいくつかの puts を追加して、追跡できるかどうかを確認してみます。

source_pathputs したところ、OSでは正しいフルパスになっていましたが、S3にアップロードされると、パスにサイト名がなくなっていました。

来週、もう一度詳しく見てみます。バックアップは存在しますが、Discourseが見つけられる場所にはありません。