Lorsque je crée un sujet et que j’upload une image, l’attribut src de l’image pointe vers mon S3_CDN_URL. En revanche, si j’upload un fichier zip, l’URL reste dans /uploads et redirige directement vers mon bucket sans passer par le S3_CDN_URL. Je n’ai pas défini DISCOURSE_CDN_URL — le guide indique que cela n’a pas d’incidence sur ce problème.
Ce problème de stockage et sa configuration constituent en effet un grand défi depuis de nombreuses années.
Je stockais mes images sur Aws S3. Puis j’ai changé mon stockage pour un serveur local. Maintenant, des centaines d’images ont soudainement disparu.
Bien que ce ne soit pas une réponse ou un commentaire direct à votre question, je voulais simplement exprimer de l’empathie face à des problèmes similaires.
Merci.
J’ai confié le travail à un ami local. Il s’en occupe.
Bien que sur votre demande, je viens de sélectionner cette option. Utiliser l'URL CDN pour tous les fichiers téléchargés sur s3 au lieu de seulement pour les images.
Mais il semble y avoir un autre problème. Il a déplacé le stockage s3 vers le serveur local. Maintenant, beaucoup de mes anciens articles, qui avaient 10 photos, environ la moitié s’affichent et l’autre moitié non. (exemple d’un tel sujet)
Il travaillera à résoudre cela, le week-end prochain.
Auparavant, avant de lui demander, j’avais naïvement sélectionné l’option pour inclure toutes les images dans mes sauvegardes, puis restauré cette sauvegarde en pensant que cela restaurerait les images sur le serveur local, pensant que cela suffirait pour déplacer toutes mes images de s3 vers le local.
Mais ce n’est pas si simple (comme je le découvre sur de nombreux sujets connexes sur meta).
Le vôtre, j’en suis à peu près sûr, est beaucoup plus compliqué.
C’est effectivement compliqué.
Je pense que les images manquantes sur ce post sont dues à l’absence de l’enregistrement Upload, vous devrez donc faire quelque chose pour récupérer cette image. Je peux me tromper.
Si j’ai raison, voici comment j’ai résolu ce qui me semble être un problème similaire auparavant. Je n’offre aucun support gratuit au-delà de ce script.
def process_uploads
begin
# Lire la liste des noms de fichiers
filenames = File.readlines('/shared/uploads/allfiles.txt').map(&:strip)
count = 0
filenames.each do |filename|
# Ajouter /shared au début du nom de fichier
filename.gsub!(/\.\//,"")
full_path = File.join('/shared/uploads/default/original/', filename)
begin
# Vérifier si le chemin existe et est un fichier régulier (pas un répertoire)
count += 1
if File.exist?(full_path) && File.file?(full_path)
# Ouvrir le fichier
File.open(full_path, 'r') do |tempfile|
# Créer l'upload en utilisant les paramètres spécifiés
u = UploadCreator.new(tempfile, 'imported', {}).create_for(-1)
puts "#{count} -- #{u.id}: #{u.url}"
end
else
puts "Attention : Chemin introuvable ou n'est pas un fichier régulier : #{full_path}"
end
rescue => e
puts "Erreur lors du traitement du fichier #{full_path} : #{e.message}"
# Continuer avec le fichier suivant même si le fichier actuel échoue
next
end
end
rescue Errno::ENOENT
puts "Erreur : Impossible de trouver files.txt"
rescue => e
puts "Erreur lors de la lecture de files.txt : #{e.message}"
end
end
# Exécuter le traitement
process_uploads;