Rebake 時に Migrate_to_S3 が失敗する

編集:あなたのエラーは私のものとは異なるようですね。一部の画像が S3 へ移動されなかったのかもしれません。すみません、読み違えていました。もしかしたら、以下の情報の一部はまだ役立つかもしれません。このガイドから S3 アップロードを設定しましたか?Configure an S3 compatible object storage provider for uploads

@evenif - 問題が発生しているとのこと、お気の毒です。この問題に直面している人のためにガイドを書く予定でしたが、必要な情報がスレッドをまたいで散らばっていたため、情報をまとめるのに時間がかかりました。ただし、アバターの修正を待ってからにしようと思っています。上記の通り、私もまだアバターの問題に直面しています。

Rails で以下を実行した場合、true または false のどちらが返されますか?

SiteSetting.migrate_to_new_scheme

false の場合は、以下のように true に設定してみてください。

SiteSetting.migrate_to_new_scheme = true

その後、少し待ってから再度確認してください(15 分ごとに実行されるはずです)。ただし、すぐに実行したい場合は:

Jobs::MigrateUploadScheme.new.execute(nil)

その後、再度 SiteSetting.migrate_to_new_schemefalse になっているか確認してください(完了したことを意味します)。

次に以下を実行します:
Upload.by_users.where("url NOT LIKE '//%' AND url NOT LIKE '/uploads/default/original/_X/%'").to_a

これにより、問題があり移行できていないアップロードが見つかります。私の場合、これらすべてのアップロードは DB にレコードとして存在していましたが、実際の画像は存在していませんでした。

リストのサイズに応じて、ページをコピーして「検索と置換」を行い、アップロード ID のリストから問題のあるレコードを削除するコマンドのリストを作成できます。

Upload.find(1).destroy
Upload.find(2).destroy
Upload.find(3).destroy

1、2、3 などをアップロード ID に置き換えてください。作成したリスト全体を Rails にコピー&ペーストして Enter キーを押してください。これで問題のあるレコードが削除されます。

その後、Rails を終了します(exit と入力)。その後、以下のコマンドを実行するだけで済みます。

rake posts:rebake
または
rake posts:rebake_uncooked_posts

uncooked を使用すると、失敗した場合に再構築を再開できます。アップロードが大量にある場合以外は、通常の rebake を使うことをお勧めします。

これですべて正常に動作するはずです。ただし、最適化されたアバターが私の場合のように破損している可能性はありますが、元の画像は S3 に存在するはずです。

デフォルトのアバターが表示されているユーザーに対して Rails で以下を実行し、アバターが正常に移動したか確認できます。
User.find_by_username('username').uploaded_avatar

また、最適化されたバージョンが存在するかどうかは以下で確認できます。
OptimizedImage.where(upload_id: upload_id).where(version: 2)