Pièces jointes servant localement sur le serveur mais pas publiquement

Résumé du problème

Je rencontre une erreur 404 lors de l’accès à un téléchargement d’image via son URL sur le site Discourse en production (https://techenclave.com), bien que l’image soit présente sur le disque et servie correctement en interne. J’ai re-cuis le message, redémarré l’application et vérifié que le service interne fonctionne, mais il renvoie toujours une 404 en externe.


Ce qui fonctionne

1. Le téléchargement existe dans la base de données

En utilisant la console Rails, j’ai confirmé que le téléchargement existe avec toutes les métadonnées correctes :

Upload.find_by(sha1: 'a8fbe877e685e6a6994532c946c446b1279da7d2')

La sortie inclut :

  • url: "/uploads/default/original/3X/a/8/a8fbe877e685e6a6994532c946c446b1279da7d2.jpeg"
  • Nom de fichier : IMG202506252257011.jpg
  • ID : 170265
  • Utilisé dans l’ID du message : 3125774

2. Le fichier existe sur le disque

J’ai vérifié que le fichier est présent à l’intérieur du conteneur :

ls -l /shared/uploads/default/original/3X/a/8/a8fbe877e685e6a6994532c946c446b1279da7d2.jpeg

:check_mark: Le fichier existe avec le bon propriétaire et les bonnes permissions :
discourse:www-data, -rw-r--r--.


3. Le lien symbolique du dossier public fonctionne

Le lien symbolique public/uploads est intact :

ls -l /var/www/discourse/public/uploads
# => /shared/uploads

4. Discourse peut le servir en interne

Testé avec :

curl -I http://localhost:3000/uploads/default/original/3X/a/8/a8fbe877e685e6a6994532c946c446b1279da7d2.jpeg

Résultat : HTTP/1.1 200 OK


5. Le message a été re-cuit

J’ai re-cuit le message avec :

Post.find(3125774).rebake!

6. L’application a été redémarrée

J’ai exécuté :

./launcher restart app

J’ai également tenté :

sudo ./launcher rebuild app

(Le démon Docker était temporairement indisponible mais a été corrigé par la suite.)


Ce qui ne fonctionne pas

Accès externe à l’image

L’accès à :

https://techenclave.com/uploads/default/original/3X/a/8/a8fbe877e685e6a6994532c946c446b1279da7d2.jpeg

Renvoie :

404 Not Found

Cela se produit sur tous les navigateurs et en mode incognito.


Ce dont j’ai besoin d’aide

Quelqu’un peut-il m’aider à identifier ce qui pourrait causer :

  • Un téléchargement qui fonctionne et qui est servi via localhost:3000,
  • mais qui renvoie une 404 en externe sur le domaine public ?

Que devrais-je vérifier d’autre ? Y a-t-il des configurations ou des journaux connexes à inspecter ?

Merci d’avance !

Même les images fraîchement téléchargées ne se chargent pas. J’obtiens une 404

Je suppose que ce n’est pas une installation standard ? C’est à peu près tout ce qui est pris en charge ici.

Comment avez-vous installé discourse ?

1 « J'aime »

La prochaine fois, mentionnez peut-être que vous avez très récemment migré ?

Avez-vous suivi ce guide lorsque vous êtes passé de temp.techenclave.com à techenclave.com ?

2 « J'aime »

Merci.

L’installation a suivi un guide d’installation standard de Discourse sur GitHub.

Oui, j’ai effectué une migration locale sur mon ordinateur portable, j’ai pris une sauvegarde et restauré la sauvegarde sur le serveur en téléchargeant le fichier et en effectuant une restauration de sauvegarde depuis le panneau d’administration. Je n’aurais pas dû faire cela car tous les fichiers joints n’ont pas été restaurés malgré l’indication de succès. Quoi qu’il en soit, j’ai utilisé rsync pour copier les fichiers de l’installation locale sur l’ordinateur portable vers le serveur afin de les mettre à jour.

Ensuite, il y a eu une migration de domaine, comme vous l’avez justement souligné, de temporaire vers la racine après avoir testé la configuration pendant une journée.

La raison pour laquelle je n’ai pas mentionné ce qui précède est que même les derniers fichiers qui étaient téléchargés après toutes ces activités ne s’affichent pas non plus. Malgré une reconstruction. Donc, je n’ai pas trouvé cette information pertinente.

Je n’ai pas suivi ce guide. Mais quand je le regarde, je peux voir que les seules étapes étaient :

  1. L’ancien domaine apparaît dans la liste des iframes autorisés avec le nouveau domaine dans les paramètres.
  2. Remappage du domaine dans les publications, ce que j’allais faire de toute façon plus tard, y compris une nouvelle cuisson une fois ce problème résolu. La publication en question a été refaite et ne contient pas l’ancien domaine dans l’URL de l’image.

Ces deux points sont-ils pertinents ?

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.