Arrêtez d'utiliser Amazon S3 pour les téléchargements

La sauvegarde contient de nombreux répertoires et sous-répertoires. Je pense que vous devez copier les fichiers de ces répertoires, depuis les deux buckets de manière récursive, vers l’emplacement correspondant sur le serveur local. Par exemple, tout le contenu des répertoires 1X et 2X des deux buckets doit être copié dans les répertoires 1X et 2X du serveur local. Je ne suis pas totalement certain, mais c’est ainsi que je le vois.

Pouvez-vous confirmer que vous avez correctement copié tous les fichiers ?

2 « J'aime »

Oui, je comprends parfaitement et j’ai veillé à ce que leurs chemins relatifs restent exactement les mêmes.

Par exemple, si un fichier se trouvait auparavant à :
//bucket1/uploads/original/2x/f/filename.jpg
Et un autre à :
//bucket2/uploads/original/1x/a/filename.png

Ces deux fichiers existent désormais à :
/var/discourse/shared/web_only/uploads/default/original/2x/filename.jpg et ../original/1x/a/filename.png

Problèmes
Avant de copier le contenu du bucket vers le serveur local, je constate que certaines de mes images ne s’affichent que sous forme d’icônes, et l’image complète n’est accessible aux visiteurs du site qu’en cliquant sur cette icône.

Après avoir copié (sans déplacer) tout le contenu du bucket vers l’emplacement indiqué ci-dessus sur mon serveur local (en conservant les chemins relatifs), et après avoir exécuté la commande
discourse remap:oldurl-or-path new-url-or-path,

Rien n’a changé visuellement sur le site. Mais ensuite, j’ai exécuté la commande
rake posts:rebake ,

Et même mes icônes d’images ont disparu, et aucune URL/chemin n’apparaît lorsque je passe le pointeur de la souris sur l’emplacement vide du placeholder de l’image.

J’espère avoir fourni suffisamment de détails.

1 « J'aime »

Dans ce cas, je pense que ce qui suit résoudra votre problème.

    ./launcher enter app
    discourse remap //bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
    discourse remap //bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
    rake posts:rebake
1 « J'aime »

Merci, Ji.

Mais comme je l’ai déjà expliqué, après avoir effectué les opérations de « remap » et de « rebake », même les icônes des images disparaissent (c’est-à-dire que la situation empire).

1 « J'aime »

Vous devez fournir le chemin correct lors du remappage, sinon cela peut causer des dysfonctionnements. J’ai manuellement remappé un lien S3 à partir de la sortie d’exemple que vous avez fournie précédemment, et cela fonctionne.

Une image hébergée dans le bucket :

https://bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/original/2X/9/9d8f29892278f164e8ce27a6b58cc8af0760802c.png

La même image hébergée sur votre serveur local :

https://bathindahelper.com/uploads/default/original/2X/9/9d8f29892278f164e8ce27a6b58cc8af0760802c.png

Vous pouvez ouvrir l’image dans un nouvel onglet pour voir les liens des deux images ci-dessus. Je suppose donc que cela fonctionnera.

 ./launcher enter app
  discourse remap //bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
  discourse remap //bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
  rake posts:rebake

1 « J'aime »

Merci encore.

J’ai fait un clic droit sur la (première) image et le chemin affiché dans la barre d’URL ne correspondait pas à mon bucket :

Il en était de même pour la deuxième image.

Vous pouvez consulter un exemple de publication sur mon site web ici (la publication est en hindi, mais vous devriez facilement repérer la petite icône de l’image au milieu du texte). L’image complète n’apparaît que si l’on clique sur cette petite icône.

Cependant, si je procède à une réaffectation, puis à une nouvelle compilation, cette icône disparaît complètement. Il n’y a alors plus aucun moyen pour le visiteur de voir l’image.

2 « J'aime »

Il semble que vous ayez déjà utilisé CloudFront pour la mise en cache. Videz le cache de votre navigateur et réessayez.
Si vous avez effectué une configuration CloudFront, il serait préférable d’annuler toutes ces configurations.

2 « J'aime »

Aucun Cloudflare {edit: CloudFront} (ni aucun autre CDN) n’est impliqué de mon côté pour mon site web depuis environ 2 ans.

Les images sur Meta sont peut-être stockées sur Cloudflare.

1 « J'aime »

Pas Cloudflare. C’est CloudFront. Avez-vous vidé le cache de votre navigateur ?

2 « J'aime »

Oui, CloudFront (désolé).

Oui, je l’ai fait. De plus, j’ai ouvert ce sujet en mode navigation privée de Firefox.

1 « J'aime »

Maintenant, j’obtiens également les mêmes liens CloudFront. Il semble que vous ayez activé AWS CloudFront pour votre site. CloudFront met en cache les images de votre bucket. Je pense que vous devez supprimer la distribution de CloudFront. Vous devez vous connecter à votre compte AWS pour vérifier si la distribution CloudFront est active ?

2 « J'aime »

Hé, nous avons mal compris CloudFront ici. En fait, c’est meta discourse qui met l’image en cache. C’est de ma faute.

1 « J'aime »

Je n’ai jamais utilisé CloudFront (ni aucun autre CDN) sur AWS ni en front-end. Bien que, il y a environ deux ans, j’aie utilisé CloudFlare pendant un mois ou deux, mais je l’ai ensuite supprimé définitivement.
Je n’ai pas non plus choisi CloudFront sur AWS. Donc, aucune question ne se pose de ce côté non plus.

De plus, sur mon PC, lorsque j’ouvre les images, elles affichent les adresses du bucket AWS, et non celles d’un autre CDN !

1 « J'aime »

J’ai mal compris CloudFront ici. En fait, meta Discourse a mis l’image en cache. J’ai édité mon message précédent. Jetez un coup d’œil.

2 « J'aime »

Vous suggérez simplement que je remap les chemins des images (de l’URL du bucket S3 vers le chemin du serveur local). Puis je rebake.

Mais comme je l’ai mentionné plus haut, je l’ai déjà fait et j’ai constaté que cela aggrave le problème. (de plus, après le rabking, la fonction « Restaurer » ne fonctionne pas non plus et il est difficile d’annuler).

Avez-vous d’autres idées utiles, s’il vous plaît ?

1 « J'aime »

Lorsque vous avez effectué la réaffectation, êtes-vous certain que les chemins étaient identiques à ceux ci-dessous,

discourse remap //bxyzbucket1.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/
discourse remap //bhdisco.s3.dualstack.ap-south-1.amazonaws.com/uploads/ /uploads/default/

Quel chemin avez-vous spécifié lors de la réaffectation ?

Je vous ai déjà fourni un exemple dans un message précédent. Cela a fonctionné. Je ne connais aucune autre méthode.

2 « J'aime »

Je vais réessayer, avec le plus grand soin possible. Mais je cherchais une méthode pour comprendre ce qui se passe derrière le rideau. Avec au moins un exemple de message, je voulais voir quels messages sont associés à quels buckets et dans quel pétrin je me trouve.

Quoi qu’il en soit, je vais réessayer et te tenir informé ici. Merci encore.

1 « J'aime »

Le chemin que vous avez spécifié dans votre précédente remappage sera reflété dans la sortie de la commande ci-dessous. Comme les deux buckets sont toujours présents, je pense que votre précédente remappage a peut-être échoué. Quoi qu’il en soit, c’est à vous de décider maintenant. J’espère que vous trouverez rapidement une solution. Bonne chance.

./launcher enter app
rails c
Upload.all.sample(2000).pluck(:url)

Merci

2 « J'aime »

Pas plus compétent que toi, mais je viens de le faire et j’ai réussi avec l’aide de @Pravi.

Les étapes à suivre pour revenir de l’upload S3 à l’état par défaut

Ce n’est pas super simple – faites très attention au texte et aux liens, car si quelque chose tourne mal, ce sera un vrai désordre à remettre en ordre. Mais c’est tout à fait faisable.

Étape 1 – Copier les fichiers de votre bucket S3 vers le dossier public/uploads/default

Installez d’abord AWS CLI dans le conteneur de l’application :

cd /var/discourse
./launcher enter app
sudo apt install awscli

Configurez AWS avec votre ID et mot de passe S3 (généralement simple) :

aws configure

Ensuite, utilisez aws pour copier tout le contenu du bucket dans public/uploads/default/ :

aws s3 sync s3://my-bucket-name/ public/uploads/default/

Étape 2 – Remapper l’URL S3

C’est plus simple en trouvant une image sur votre forum et en inspectant son URL. Vous voulez chaque élément jusqu’au nom du fichier (y compris le dernier /) :

discourse remap //le-long-url-dans-vos-images-jusqu-au-nom-de-fichier /uploads/default/

Étape 3 – Rebake les posts et reconstruire l’application :

rake posts:rebake
exit
./launcher rebuild app

Étape 4 – Désactiver S3

  1. Désactivez les uploads S3 dans les paramètres (ou dans votre app.yml si vous l’avez configuré ainsi). Si vous utilisiez un CDN, supprimez également le lien vers celui-ci dans les paramètres (sinon, cela ne se désactive pas vraiment).
  2. Arrêtez votre conteneur. Je l’ai fait en déplaçant le contenu vers un nouveau conteneur comme sauvegarde, comme première étape.

Ouf ! C’est fait. Jusqu’à présent, je n’ai rencontré aucun problème. Allez tester ça !

10 « J'aime »

Bon travail ! Je pense que ce sont les étapes qui m’ont finalement aidé à réussir, mais j’ai essayé beaucoup de remappages différents qui n’ont pas aussi bien fonctionné ! C’est super d’avoir des instructions formalisées.

4 « J'aime »