Télécharger des ressources vers S3 après une mise à niveau dans le navigateur

Après avoir déplacé les images et les ressources (js) de mon site vers S3, j’ai essayé de mettre à niveau le forum en utilisant l’interface /admin/upgrade. La mise à niveau s’est bien déroulée, mais il semble que les ressources n’aient pas été téléchargées dans le bucket S3, rendant mon site inaccessible jusqu’à ce que je reconstruise l’application depuis le shell.
J’ai là un hook qui s’en charge pour moi. Il serait agréable d’avoir ce type de fonctionnalité dans l’interface web également. Je ne sais pas si elle est déjà présente ; si c’est le cas, merci de me le faire savoir. :slight_smile:

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

Non, vous ne pouvez pas déplacer des assets vers S3 depuis l’interface d’administration. Vous devez le faire via SSH, car des tâches supplémentaires sont requises lors de cette migration, sauf si vous effectuez cette opération sur une installation neuve.

Ah, je vois. J’appréciais la méthode de mise à jour sans interruption et transparente, jusqu’à ce que je passe à S3. Existe-t-il un moyen de ne pas servir les fichiers JavaScript via S3, mais uniquement les images ?

Vous ne pouvez pas servir du JS via S3. Vous ne pouvez que télécharger et servir des fichiers multimédias (images, documents, vidéos, etc.) via S3.

Pour le JS, vous aurez besoin d’un CDN, par exemple CloudFront.

Oui, je ne diffuse pas directement du JS depuis S3 ; il est stocké dans S3 puis servi via un CDN. Ce que je voulais demander, c’est si je peux stocker le JS localement et le servir via un CDN, en ne conservant que les médias sur S3.

Tu te trompes encore une fois.
Le JS de Discourse est censé être servi directement via le CDN, l’installation de Discourse agissant comme origine de tirage. Je ne sais pas comment tu pourrais héberger du JS sur S3, mais garde à l’esprit que le JS est régénéré à chaque reconstruction. Tout ce que tu servirais via S3 serait probablement obsolète et cela ne ferait qu’attirer plus de problèmes.

Cela a commencé à se produire après avoir configuré les paramètres S3 en suivant ce lien : Configure an S3 compatible object storage provider for uploads

C’est pourquoi ils ont ajouté le hook after_assets_precompile pour télécharger les assets mis à jour sur S3.

Comment puis-je corriger cela ? Cela renvoie une erreur 404 si j’essaie d’accéder à un asset via le serveur local. Cela doit passer par S3. Sinon, j’aurais déjà ajouté une règle de routage edge sur mon CDN pour rediriger les requêtes d’assets via le domaine local.

Si vous lisez le titre du message, « Object Storage for Uploads », cela en dit long.

Que voulez-vous dire par domaine local ? Où est installé votre Discourse ?

Par domaine local, j’entendais le serveur sur lequel Discourse est installé, comme les fichiers JS étant locaux au serveur Nginx et non sur S3.

Malheureusement, le sujet mentionné ne fait pas cela, même s’il est bien intitulé « utiliser un stockage objet pour les téléversements ». Si vous configurez votre forum selon les instructions de ce sujet, cela nécessite que les ressources soient poussées vers S3.

Comment puis-je le configurer de manière à pouvoir conserver les fichiers JS sur le serveur d’installation de Discourse ?