أخطاء عند محاولة استخدام تخزين S3 مخصص

بما أنني محبط باستمرار من تعطل إضافة Azure Blob Storage، فقد قمت بتشغيل خادم Flexify.IO لترجمة بروتوكول Azure إلى بروتوكول S3.

ومع ذلك، بعد إعداده في Discourse، لا يعمل. الخطأ هو:

فشل في فتح اتصال TCP إلى support.xxx.xxx.xxx.xxx:443 (getaddrinfo: الاسم أو الخدمة غير معروف)

حيث xx.xx.xx.xx هو عنوان IP لبوابة S3 و support هو اسم الدلو…

المضحك في الأمر هو أنني استخدمت S3 Browser لاختبار نقطة النهاية وقد عملت بشكل جيد.

إذن، هل يمكن لروح طيبة أن تخبرني بما أخطأت فيه؟

أستطيع فقط أن أرى أن المشكلة قد تكون بسبب المنطقة، حيث أن المنطقة التي تعرضها نقطة النهاية هي eastasia (منطقة Azure صالحة) ولكن يمكنني فقط الاختيار من بين مناطق AWS القياسية في قائمة. ومع ذلك، لا يزال الأمر غريبًا لأن الخطأ يبدو أنه يشير إلى فشل في الاتصال بنقطة النهاية نفسها، وليس عدم تطابق المنطقة.

أشعر أن إعداد s3_bucket الخاص بي خاطئ، حيث أنه يضيف اسم الدلو (bucket) إلى عنوان URL للنهاية (endpoint) نفسه.

هل يجب أن أستخدم تنسيق bucket/folder بدلاً من ذلك؟ وماذا يجب أن أضع في كل منهما؟

تعديل: من خلال المصدر، يبدو أن هذا الأمر مُبرمج بشكل ثابت (hard-coded). ماذا لو أن مزود التخزين الخاص بي لا يستخدم اسم الدلو كبادئة؟

يجب عليك محاولة اتباع التوثيق حول استخدام التخزين الكائني للتحميلات (S3 والنسخ) لحالتك الاستخدامية. إنه أكثر مرونة بكثير. عندما تنجح في جعله يعمل، يمكنك إضافته إلى الويكي أيضًا!

إعجابَين (2)

بما أن هذا:

فإن هذا خاطئ بالتأكيد:

رسالة الخطأ تقول ذلك بوضوح. getaddrinfo: Name or service not known تعني فشل في استعلام DNS؛ لن يكون هناك اسم مضيف مثل “support.303.303.303.303” أبدًا.

من أين حصلت على جزء “support”؟

توضح توثيق Flexify ما يلي:

غيّر نقطة نهاية S3 التي تستخدمها تطبيقك إلى s3.flexify.io (أو اسم مضيف آخر مُظهر في الإعدادات).

لذلك لا يمكنك استخدام وحدة التحكم الإدارية لتغييرها، بل اقرأ الموضوع الذي ذكره @falco :arrow_double_up: وابدأ بـ:

  DISCOURSE_S3_ENDPOINT: https://s3.flexify.io
إعجابَين (2)

آسف جدًا. support هو اسم الدلو (bucket). أستطيع أن أرى أن S3 تقوم ببساطة بإضافة اسم الدلو قبل اسم النطاق، وهذا ما يفترضه Discourse.

نعم، لقد استنتجت ذلك. إذًا يجب أن أقوم بتشفير نقاط النهاية (end-points) يدويًا في app.yaml، أليس كذلك؟

@Falco @schleifer حسنًا، لقد جربته، ولكن للأسف لا يزال يُظهر لي نفس الخطأ تمامًا.

لذلك، لا أعتقد أنه يعمل حتى عند ترميزه بشكل ثابت في app.yaml. يبدو أنها تدخل في نفس تدفق الكود.

إليك إعدادات app.yaml الخاصة بي:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: eastasia
  DISCOURSE_S3_ENDPOINT: https://??.??.??.??
  DISCOURSE_S3_ACCESS_KEY_ID: ???
  DISCOURSE_S3_SECRET_ACCESS_KEY: ???
  DISCOURSE_S3_BUCKET: support

لا يزال يحاول الوصول إلى support.??.??.??.??:443.

لذا، أفترض أنه في Discourse يجب أن تشكل الدّرجة (bucket) نطاقًا فرعيًا؟

تعديل 1

حسنًا، لقد ألغيت إعدادات app.yaml وأنشأت نطاقًا فرعيًا يحتوي على support يشير إلى xx.xx.xx.xx. الآن، عند الرفع، يدور لفترة طويلة، ثم عاد برسالة خطأ عامة:

Aws::S3::Errors::BadRequest

هل هناك طريقة للحصول على رسالة الخطأ الدقيقة؟

هل جربت التحقق من صفحة /logs؟

نعم، لكن لا يوجد شيء هناك…

ما هي القيمة الدقيقة التي تستخدمها لمتغير البيئة الخاص بنقطة النهاية؟

حسناً، لقد وجدت إعداداً في Flexify.IO لتعيين وضع النطاق الفرعي. إنه يعمل الآن. :clinking_glasses:

سأقوم بتحديث الويكي!

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.