ブラウザ内でのアップグレード後にアセットをS3にアップロード

サイトの画像やアセット(js)を S3 に移動させた後、/admin/upgrade インターフェースを使用してフォーラムをアップグレードしようとしました。アップグレード自体は正常に完了しましたが、アセットが S3 バケットにアップロードされなかったため、サイトが利用不能になってしまいました。その後、シェルからアプリを再ビルドすることで復旧しました。

そこには、それを自動で行うフックがあります。このような機能を Web インターフェースにも実装できると便利です。もし既に実装されている場合は、お知らせください。:slight_smile:

 after_assets_precompile:
   - exec:
       cd: $home
       cmd:
         - sudo -E -u discourse bundle exec rake s3:upload_assets

いいえ、管理画面からアセットを S3 に移動することはできません。この移行時には追加のタスクが必要となるため、SSH を通じて行う必要があります。ただし、新規インストールの場合は例外です。

ああ、なるほど。S3 に切り替えるまでは、ダウンタイムなしのシームレスなアップグレード方法が好きでした。JavaScript は S3 経由で配信せず、画像のみを S3 経由で配信することは可能でしょうか?

JS は S3 経由で配信できません。S3 を通じては、メディア(画像、ドキュメント、動画など)のアップロードと配信のみが可能です。

JS の場合は、CloudFront などの CDN が必要です。

はい、JS は S3 から直接配信していません。S3 に保存し、CDN を通じて配信しています。私が聞きたかったのは、JS をローカルに保存し、CDN を通じて配信し、メディアのみを S3 に保存することは可能かどうかです。

またしても完全に間違っています。
Discourse の JS は、Discourse のインストールをプルオリジンとして、CDN を介して直接配信されることを想定しています。JS を S3 に配置する方法がわかりませんが、JS はリビルド時に再生成される点に留意してください。S3 を通じて配信するものはおそらく古くなっており、さらにトラブルを招くことになります。

この現象は、以下の手順で S3 設定を構成した後から発生するようになりました:Configure an S3 compatible object storage provider for uploads

そのため、更新されたアセットを S3 にアップロードするために、after_assets_precompile フックが追加されました。

この問題をどのように修正すればよいでしょうか?ローカルサーバー経由でアセットにアクセスしようとすると 404 エラーになります。S3 経由である必要があります。そうでなければ、CDN にエッジルーティングルールを設定して、アセット要求をローカルドメイン経由で取得させていたはずです。

投稿タイトルをお読みいただければ、「アップロード用オブジェクトストレージ」とあり、タイトルだけで十分です。

ローカルドメインとは何を指していますか?Discourse はどこにインストールされていますか?

ローカルドメインとは、Discourse がインストールされているサーバーのことを指します。つまり、js ファイルは S3 上ではなく、nginx サーバー上にローカルに存在しているということです。

残念ながら、言及されているトピックは、タイトルが「アップロード用のオブジェクトストレージの使用」であるにもかかわらず、そのようには機能していません。そのトピックの指示に従ってフォーラムを設定すると、アセットを S3 へプッシュする必要があります。

Discourse インストールサーバーに JS ファイルを保持できるような設定方法はありますか?