Если я создаю тему и загружаю изображение, атрибут src тега img указывает на S3_CDN_URL. Однако при загрузке ZIP-файла URL находится в /uploads и перенаправляет напрямую в мой бакет, вместо использования S3_CDN_URL. У меня не установлен параметр DISCOURSE_CDN_URL — в руководстве указано, что это не влияет на данную проблему.
Спасибо. Я поручил задачу одному своему местному знакомому. Он уже разбирается в этом.
Хотя, следуя вашему вопросу, я только что выбрал эту опцию: Использовать CDN-URL для всех файлов, загруженных в S3, а не только для изображений.
Но, похоже, возникла ещё одна проблема. Он перенёс хранилище S3 на локальный сервер. Теперь многие из моих старых постов, где было 10 фотографий, отображаются лишь частично: примерно половина картинок видна, а половина — нет (пример такой темы).
Он займётся решением этой проблемы в ближайшие выходные.
Ранее, прежде чем проконсультироваться с ним, я наивно выбрал опцию включения всех изображений в резервные копии, а затем восстановил эту копию, полагая, что это вернёт изображения на локальный сервер, и этого будет достаточно для переноса всех моих изображений из S3. Но, как я выяснил, читая множество связанных тем на Meta, всё не так просто.
Полагаю, отсутствующие изображения в том посте связаны с тем, что запись об загрузке (Upload record) не существует, поэтому вам нужно предпринять какие-то действия, чтобы вернуть это изображение. Возможно, я ошибаюсь.
Если я прав, вот как я решил ранее похожую проблему. Предоставляю только этот скрипт, бесплатная поддержка далее не оказывается.
def process_uploads
begin
# Чтение списка имен файлов
filenames = File.readlines('/shared/uploads/allfiles.txt').map(&:strip)
count = 0
filenames.each do |filename|
# Добавляем /shared в начало имени файла
filename.gsub!(/\.\//,"")
full_path = File.join('/shared/uploads/default/original/', filename)
begin
# Проверяем, существует ли путь и является ли он обычным файлом (не каталогом)
count += 1
if File.exist?(full_path) && File.file?(full_path)
# Открываем файл
File.open(full_path, 'r') do |tempfile|
# Создаем загрузку с указанными параметрами
u = UploadCreator.new(tempfile, 'imported', {}).create_for(-1)
puts "#{count} -- #{u.id}: #{u.url}"
end
else
puts "Предупреждение: Путь не найден или это не обычный файл: #{full_path}"
end
rescue => e
puts "Ошибка при обработке файла #{full_path}: #{e.message}"
# Продолжаем обработку следующего файла, даже если текущий не удался
next
end
end
rescue Errno::ENOENT
puts "Ошибка: Не удалось найти files.txt"
rescue => e
puts "Ошибка при чтении files.txt: #{e.message}"
end
end
# Выполняем обработку
process_uploads;