لم يتم تحميل الصور بعد تكوين تحميلات S3

مرحبًا. لقد قمنا مؤخرًا بالانتقال من Discourse على EC2 إلى Discourse ECS (خدمة الحاويات). عندما كنا على EC2، لم يكن تحميل S3 مُعدًا بعد. قبل الانتقال، قمنا بنسخ جميع الصور من EC2 إلى دلو S3 (مع وصول عام). ومع ذلك، بعد إجراء الانتقال مع تمكين تحميل S3 (بدون CDN بعد)، لاحظنا أن الصور (والصور الرمزية) لم يتم تحميلها على الإطلاق.

يحتوي ملف app.yml على:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: us-east-1
  DISCOURSE_S3_ACCESS_KEY_ID: aws_access_key
  DISCOURSE_S3_SECRET_ACCESS_KEY: aws_secret_key
  DISCOURSE_S3_BUCKET: <uploads-bucket>
  DISCOURSE_S3_BACKUP_BUCKET: <backups-bucket>
  DISCOURSE_BACKUP_LOCATION: s3

hooks:
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets

لم يساعد تشغيل الأوامر التالية داخل الحاوية أيضًا:

rake posts:rebake
rake posts:missing_uploads
rake avatars:refresh

لاحظنا أيضًا الفرق بين عناوين URLs للصور (ما زال Discourse يستخدم عناوين “التحميلات المحلية في EC2”).

هذا هو الرابط في S3: https://[s3-bucket].s3.amazonaws.com/original/1X/831092e27d6c066c3618a587a5c378e1c794f2c6.png

الرابط في Discourse (لا يزال العنوان من تحميلات EC2): https://[domain]/uploads/default/original/1X/831092e27d6c066c3618a587a5c378e1c794f2c6.png

الخطأ في المتصفح هو: 404 NOT FOUND

كيف يمكننا إعداد Discourse لاستخدام عناوين URLs الصحيحة لـ S3 للصور؟

هل قمت بتشغيل مهمة Rake للهجرة إلى S3؟

ينبغي القيام بذلك على EC2 قبل الهجرة.

مرحبًا جاي. حاولت تنفيذ الأمر في ECS لكن واجهت خطأ:

فقط للاستفسار: هل يجب تنفيذ هذا الأمر على EC2 فقط؟ هل توجد طريقة أخرى لنقل الملفات المرفقة أو تحديث عناوين الصور؟ حاليًا، مثيل EC2 متوقف، وإعداد ECS الحالي يستخدم النطاق وقاعدة البيانات/الذاكرة المؤقتة بالفعل، لذا لست متأكدًا مما إذا كان بإمكاننا إعادة توجيه النطاق وقاعدة البيانات/الذاكرة المؤقتة إلى مثيل EC2 القديم (ثم إعادة البناء) دون توقف. شكرًا لك.

ستريد تشغيل الأمر في مثيل لديه وصول إلى الصور. لكن، إذا قمت أنت بنقلها إلى S3 يدويًا، فقد تحتاج إلى إجراء بعض التعديلات على جدول الرفع بدلاً من ذلك.

كنت أعمل على دليل تعليمي يحتوي على إرشادات للانتقال من bucket إلى آخر قد تستخدمه لحل مشكلتك، رغم أنك ستحتاج إلى تعديل هذه الإرشادات لمراعاة التغييرات من المحلي إلى bucket بدلاً من من bucket إلى bucket.

لو كنت سأفرض عليك سعرًا ثابتًا للعمل، لربما كنت سأطلب 4 ساعات، رغم أنه لو كنت ستدفع بالساعة فقد يكون الأمر ساعة واحدة فقط.

آه! عذرًا. لقد لاحظت هذا للتو. إذا كان EC2 يستخدم نفس قاعدة البيانات، فقد تتمكن من إعادة تشغيله (مع ترك ECS في مكانه)، وتشغيل مهمة migrate-to-s3 هناك؛ وستحتاج أولاً إلى وضع جميع عناصر S3 في متغيرات البيئة كما هو موضح في استخدام التخزين الكائني للرفع (S3 والنسخ). يُرجح أن تكون هذه هي الحل الأسهل. أنصحك بأخذ نسخة احتياطية لقاعدة البيانات فقط قبل البدء.

مرحبًا جايس. شكرًا على الرد. فهمت. أعتقد أن ذلك سيعمل.