التنزيلات القادمة من S3 حتى مع تعيين DISCOURSE_S3_CDN_URL

I followed the guide at Using Object Storage for Uploads (S3 & Clones) to set up Backblaze B2 for upload storage and I’m seeing a strange problem.

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.

Me relevant settings are:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: "us-west-000"
  DISCOURSE_S3_INSTALL_CORS_RULE: false
  DISCOURSE_S3_CONFIGURE_TOMBSTONE_POLICY: false
  DISCOURSE_S3_ENDPOINT: "https://s3.us-west-000.backblazeb2.com"
  DISCOURSE_S3_ACCESS_KEY_ID: "ID"
  DISCOURSE_S3_SECRET_ACCESS_KEY: "KEY"
  DISCOURSE_S3_CDN_URL: "https://devforum-b2-cdn.freetls.fastly.net"
  DISCOURSE_S3_BUCKET: "bucket-name"
  DISCOURSE_S3_BACKUP_BUCKET: "backup-bucket/devforum"
  DISCOURSE_BACKUP_LOCATION: s3

Why would zip files be handled differently than images?

إعجاب واحد (1)

هذه المسألة الخاصة بالتخزين وتكوينه تعتبر فعلاً تحديًا كبيرًا على مر السنين.

كنت أخزن صوري على AWS S3. ثم غيرت التخزين الخاص بي إلى الخادم المحلي. الآن اختفت مئات الصور فجأة.

على الرغم من أن هذا ليس ردًا مباشرًا أو تعليقًا على استفسارك، إلا أنني أُعبّر عن تعاطفي مع المشكلات المشابهة.

انظر إعداد الموقع: استخدام URL CDN لجميع التحميلات على S3

استخدم URL CDN لجميع الملفات التي تم تحميلها على S3 بدلاً من الصور فقط.

إعجاب واحد (1)

شكرا لك.
لقد عيّنت المهمة لصديق محلي لي. إنه يبحث في الأمر.
على الرغم من أنني اخترت هذا الخيار للتو بناءً على طلبك. استخدم عنوان 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;
إعجاب واحد (1)