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.
شكرا لك.
لقد عيّنت المهمة لصديق محلي لي. إنه يبحث في الأمر.
على الرغم من أنني اخترت هذا الخيار للتو بناءً على طلبك. استخدم عنوان URL لشبكة توصيل المحتوى (CDN) لجميع الملفات التي تم تحميلها إلى S3 بدلاً من الصور فقط.
ولكن يبدو أن هناك مشكلة أخرى. لقد قام بنقل تخزين S3 إلى خادم محلي. الآن العديد من مشاركاتي القديمة، والتي كانت تحتوي على 10 صور، يتم عرض حوالي نصفها والنصف الآخر لا. (مثال على أحد هذه المواضيع)
سيعمل على حل هذا في عطلة نهاية الأسبوع القادمة.
في وقت سابق، قبل أن أسأله، اخترت بسذاجة خيار تضمين جميع الصور في النسخ الاحتياطية الخاصة بي، ثم استعدت هذا النسخ الاحتياطي معتقدًا أنه سيستعيد الصور إلى الخادم المحلي، معتقدًا أن هذا سيكون كافيًا لنقل جميع صوري من S3 إلى الخادم المحلي.
لكن الأمر ليس بهذه البساطة (كما أكتشف في العديد من المواضيع ذات الصلة على meta).
[اقتباس=“باتيندا، المشاركة:4، الموضوع:177000”]
شكرًا.
لقد عينت الوظيفة لبعض أصدقائي المحليين. وهو يطلع على الأمر.
[/اقتباس]
آسف. كنت أتحدث عن المشكلة الأخرى.
أعتقد أن مشكلتك، على الأرجح، أكثر تعقيدًا.
[اقتباس=“باتيندا، المشاركة:4، الموضوع:177000”]
نقل التخزين s3 إلى الخادم المحلي.
[/اقتباس]
هذا معقد بالفعل.
أعتقد أن الصور المفقودة في ذلك المنشور بسبب عدم وجود سجل رفع، لذلك ستحتاج إلى القيام بشيء لاستعادة تلك الصورة. قد أكون مخطئًا.
إذا كنت على حق، إليك كيف حللت ما أعتقد أنه مشكلة مماثلة من قبل. أنا لا أقدم دعمًا مجانيًا بخلاف هذا السكربت.
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;