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.
감사합니다.
이 일을 제 지인 중 한 명에게 맡겼습니다. 현재 확인 중입니다.
다만, 질문을 받고 방금 이 옵션을 선택했습니다. Use CDN URL for all the files uploaded to s3 instead of only for images.
하지만 다른 문제도 있는 것 같습니다. 그가 S3 스토리지를 로컬 서버로 이동시켰는데, 이제 사진 10장이 있던 기존 게시물 중 절반 정도만 표시되고 나머지 절반은 표시되지 않습니다. (이러한 토픽의 예시)
그는 이번 주말에 이 문제를 해결하기 위해 작업할 예정입니다.
그에게 묻기 전에, 저는 어리석게도 모든 이미지가 백업에 포함되도록 하는 옵션을 선택한 뒤, 그 백업을 복원했습니다. 이렇게 하면 이미지가 로컬 서버로 복원되어 S3에서 모든 이미지를 로컬로 옮기는 데 충분할 것이라고 생각했기 때문입니다.
하지만 생각만큼 단순하지 않다는 것을 깨닫고 있습니다(메타의 관련 토픽들에서 확인하고 있습니다).
그 게시물에 이미지가 없는 이유는 업로드(Upload) 레코드가 존재하지 않기 때문이라고 생각합니다. 따라서 그 이미지를 되찾기 위해 어떤 조치를 취해야 할 것입니다. 제 추측이 틀릴 수도 있습니다.
제가 맞다면, 이전에 제가 비슷한 문제로 생각했던 문제를 어떻게 해결했는지 알려드리겠습니다. 이 스크립트 외에 무료 지원은 제공하지 않습니다.
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;