If I create a thread and upload an image the img src is set to my S3_CDN_URL. If I upload a zip file the URL is at /uploads and redirect directly to my bucket instead of using the S3_CDN_URL. I do not have DISCOURSE_CDN_URL set - the guide indicate it doesn’t affect this issue.
Esta cosa de almacenamiento y su configuración son, en efecto, un gran desafío a lo largo de los años.
Yo almacenaba mis imágenes en Aws S3. Y luego cambié mi almacenamiento a un servidor local. Ahora, hay cientos de imágenes que desaparecieron repentinamente.
Aunque esto no es una respuesta directa o comentario a tu consulta, solo quiero mostrar empatía hacia problemas similares.
Gracias.
Le he asignado el trabajo a un amigo local mío. Él lo está revisando.
Aunque a petición tuya, acabo de seleccionar esta opción. Usar URL de CDN para todos los archivos subidos a s3 en lugar de solo para imágenes.
Pero parece haber algún otro problema. Él ha trasladado el almacenamiento de s3 a un servidor local. Ahora muchas de mis publicaciones antiguas, que si tenían 10 fotos, alrededor de la mitad se muestran y la otra mitad no. (ejemplo de un tema así)
Él trabajará en resolver esto el próximo fin de semana.
Anteriormente, antes de preguntarle, seleccioné ingenuamente la opción de incluir todas las imágenes en mis copias de seguridad, luego restauré esa copia de seguridad pensando que restauraría las imágenes al servidor local, pensando que esto sería suficiente para mover todas mis imágenes de s3 a local.
Pero esto no es tan simple (como estoy descubriendo en muchos temas relacionados en meta).
Estoy bastante seguro de que el tuyo es mucho más complicado.
Eso es ciertamente complicado.
Creo que las imágenes que faltan en esa publicación se deben a que no existe el registro de carga, por lo que necesitarás hacer algo para recuperar esa imagen. Podría estar equivocado.
Si tengo razón, aquí explico cómo resolví lo que creo que fue un problema similar antes. No ofrezco soporte gratuito más allá de este script.
def process_uploads
begin
# Lee la lista de nombres de archivo
filenames = File.readlines('/shared/uploads/allfiles.txt').map(&:strip)
count = 0
filenames.each do |filename|
# Añade /shared al principio del nombre de archivo
filename.gsub!(/\.\//,"")
full_path = File.join('/shared/uploads/default/original/', filename)
begin
# Comprueba si la ruta existe y es un archivo regular (no un directorio)
count += 1
if File.exist?(full_path) && File.file?(full_path)
# Abre el archivo
File.open(full_path, 'r') do |tempfile|
# Crea la carga usando los parámetros especificados
u = UploadCreator.new(tempfile, 'imported', {}).create_for(-1)
puts "#{count} -- #{u.id}: #{u.url}"
end
else
puts "Advertencia: Ruta no encontrada o no es un archivo regular: #{full_path}"
end
rescue => e
puts "Error al procesar el archivo #{full_path}: #{e.message}"
# Continúa con el siguiente archivo incluso si el actual falla
next
end
end
rescue Errno::ENOENT
puts "Error: No se pudo encontrar files.txt"
rescue => e
puts "Error al leer files.txt: #{e.message}"
end
end
# Ejecuta el procesamiento
process_uploads;