Boost
(Boost)
1
Discourse のインストールを最近、CDN を使用し、アップロードやサイトアセットを S3 互換サービスに保存するように設定しました。それ以外の機能は正常に動作していますが、カスタム絵文字の画像が読み込まれません。
HTML を確認したところ、ある絵文字の URL は以下のようになっていました。
//thrivecommunityforum.s3.eu-central-1.wasabisys.com/original/2X/6/6b7f95a2cfc7810d26c7e170ebf926ba8634261b.png
(ファイルマネージャーで「パブリック書き込みが有効になっている」という警告が表示されたため、バケットへのパブリックアクセスを防止するオーバーライドを設定したため、この URL は読み込まれません)
一方、他のすべてのアップロード画像やサイトアセットは、設定した CDN を正しく参照しています。
標準絵文字の URL は以下のようになっています。
したがって、カスタム絵文字の処理において画像リンクを生成する際にバグがあり、S3 に保存されたファイルの前面に設定されている CDN が使用されていないのではないかと結論付けました。
関連するトピックを探しましたが、以下のものしか見つかりませんでした。
このトピックは時代遅れのようですが、Discourse は私のサイト上でカスタム絵文字の提供に S3 を使用しようとしています。
Falco
(Falco)
2
カスタム絵文字のテスト


標準絵文字

標準絵文字は1つのCDNを使用し、カスタム絵文字は別のCDNを使用しますが、アップロード用のオブジェクトストレージの使用方法(S3のクローン)を完全に守って適切な設定を行えば、どちらもCDNでカバーされます。
これはバグではなく、標準絵文字はアプリのコードベース内に格納され、カスタム絵文字は通常のサイトアップロードとして扱われるため、期待通りの動作です。
Boost
(Boost)
3
そのスレッドを確認しましたが、私の設定は正しいはずです:
DISCOURSE_CDN_URL: https://thrivecommunity-cdn.b-cdn.net
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: eu-central-1
DISCOURSE_S3_ENDPOINT: https://s3.eu-central-1.wasabisys.com
DISCOURSE_S3_INSTALL_CORS_RULE: false
DISCOURSE_S3_ACCESS_KEY_ID: aaaa
DISCOURSE_S3_SECRET_ACCESS_KEY: aaaa
DISCOURSE_S3_CDN_URL: https://thrivecommunity-uploads.b-cdn.net
DISCOURSE_S3_BUCKET: thrivecommunityforum
DISCOURSE_S3_BACKUP_BUCKET: thrivecommunityforum-backup
DISCOURSE_BACKUP_LOCATION: s3
私も同様の問題に直面しました(S3 への移行時に、生投稿内に他のアップロードファイルが含まれていない場合、カスタム絵文字を含む投稿が再ビルド対象としてマークされず、結果として生成されたリンクが CDN を指していませんでした)。
私はカスタム絵文字のいずれかを一度削除して再アップロードすることで修正しました。これにより自動的にタスクが実行され、カスタム絵文字を含むすべての投稿が再構築されました(ただし、カスタム絵文字を含む投稿を直接再ビルドするための Rake タスクも存在するはずです)。
Boost
(Boost)
5
admin/customize/emojisでも、投稿エディターのプレビューでも問題が見られます。また、過去1時間以内に行われた投稿に対するリトート反応も失敗します。
つまり、これは絵文字を使用している古い投稿だけでなく、新しい投稿や UI の一部(リトート反応ピッカーも、管理画面の絵文字管理エリアと同様に、誤った URL を使用しています)にも影響しています。
Falco
(Falco)
6
これは S3 CDN URL ignored when uploading into posts に関連する問題です。元のトピックに追加されました。
プラグインはサードパーティ製のため、プラグインのトピックで報告してください。
これは正当な問題ですが、管理者専用ページであるため影響は限定的です。
Boost
(Boost)
7
なるほどですね。実際に投稿すると、その中で絵文字が正しく表示されます。
Retort プラグインの修正が管理画面の修正と類似している場合、私の Discourse インスタンスでカスタムリアクション絵文字が広く使われているため、プラグインの修正を試してみようかと思います。
Boost
(Boost)
8
少し確認した後、自分で修正を試みました。
どうやら問題の原因は、カスタム絵文字に対して、Discourse の JavaScript メソッド buildEmojiUrl が CDN URL ではなくストレージ URL を受け取っている点のようです。これは、retort プラグインでも同様に使用されているようです。
そのため、そこを修正すれば、おそらくすべての問題が解決するはずです。
その簡易確認の後、カスタム絵文字の URL を構築していると思われる箇所を見つけ、以下のように変更しました:
rails console でテストしたところ、本番サイトでの URL 生成が修正されたように見えました。そこでその変更をデプロイしてみましたが、うまくいきませんでした。
その後、更新を促すために EMOJI_VERSION を 10 に変更してみましたが、これも機能しませんでした。launcher enter を実行して git log を確認すると、私のコミットは確かに存在しています。ここではこのアプローチに従いました: