Window.pipedriveLeadboosterConfig = { القاعدة: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', الإصدار: 2, } ؛(الدالة () { var w = نافذة إذا كان (w.LeadBooster) { console.warn('LeadBooster موجود بالفعل') } وإلا { { w.LeadBooster = { q: [], على: دالة (ن، ح) { { هذا.q.push({ t: 'o'، n: n، n: n، h: h }) }, الزناد: الدالة (n) { هذا.q.push({ t: 't'، n: n: n }) }, } } })() thecodest, Author at The Codest - Page 18 of 18

أمازون S3 هي خدمة قوية للغاية في قلب خدمات أمازون ويب سيرفيسز. ومع ذلك، خارج بيئة الإنتاج، قد يكون من الصعب العمل مع S3 خارج بيئة الإنتاج. فهي تنطوي على تمرير مفاتيح الوصول، وتوفير حسابات المستخدمين، والحفاظ على اتصال شبكة موثوق به - ناهيك عن أنها تكلف أموالاً. FakeS3 هو خادم خفيف الوزن يحاكي سلوك S3 الحقيقي. فهو يستجيب للمكالمات نفسها التي يستجيب لها Amazon S3 ويخزن الملفات التي تم تحميلها في نظام الملفات المحلي الخاص بك - لا توجد طلبات إلى خدمة أمازون. على الرغم من أن الجوهرة لا تدعم المجموعة الكاملة لأوامر S3، إلا أن واجهة برمجة التطبيقات المنفذة كافية لمعظم حالات استخدام التطبيقات.

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

ما هو هدفنا؟

يتطلب دمج الأدوات الموصوفة ثلاث خطوات:

  1. تشغيل خادم S3 المزيف المقدم من جوهرة FakeS3 المزيفة في الخلفية.
  2. تكوين عميل AWS S3 لتفويض جميع الطلبات إلى خادم مزيف تم إطلاقه.
  3. تهيئة مشبك الورق لاستخدام نقطة نهاية S3 وهمية في عناوين URL المورد المبنية.

التركيب

لنبدأ بتثبيت الجواهر المطلوبة:

# Gemfile

جوهرة "مشبك الورق"
جوهرة "aws-sdk", "~> 1.6"

الجوهرة "fakes3"، المجموعة: [:تطوير، :اختبار]

تأكد من تثبيت الإصدار 1.6 من aws-sdk. لا يعمل مشبك الورق الذي يستخدم SKD لإدارة التخزين في خدمة Amazon بشكل جيد مع الإصدارات الأعلى من هذه الجوهرة. ويرجع ذلك إلى التغييرات الكبيرة التي طرأت على واجهة برمجة التطبيقات SDK التي تم جلبها مع الإصدار 2.0.

تذكر أيضًا أن الهدف الرئيسي من FakeS3 هو تقليل تبعيات وقت التشغيل. إنها أكثر من أداة تطوير لاختبار استدعاءات S3 في الكود بدلاً من خادم إنتاج يتطلع إلى تكرار وظيفة S3. لذلك يجب عليك تضمين الجوهرة في مجموعة التطوير والاختبار فقط.

تكوين AWS

توفر AWS SDK طريقة مساعدة مخصصة مسؤولة عن تحميل التكوين. سيقوم افتراضيًا بتحميل التكوين من config/aws.ymlواستخراج معلمات البيئة الحالية وتمريرها إلى عميل AWS. أولاً، قم باستدعاء الطريقة التالية في المُهيئ:

# config/initializers/aws.rb

AWS:::Rails.load_yaml_config

والآن، بعد أن أصبح لدينا ملف تهيئة يتم تحميله بشكل صحيح، يمكننا المتابعة في تحديد محتواه:

# config/aws.yml

التطوير: &التطوير
    Access_key_ID: "abc"
    مفتاح_الوصول_السري: "abc": "abc"
    نقطة النهاية s3: "المضيف المحلي"
    s3_port: 10001
    s3_فورس_باث_ستايل: صحيح
    استخدام_ssl: خطأ

اختبار: *تطوير

دعونا نناقش جميع المعلمات واحدة تلو الأخرى:

التهيئة لبيئة الإنتاج واضحة ومباشرة جداً:

# config/aws.yml

الإنتاج: &إنتاج
    access_key_keyid:     
    مفتاح_الوصول_السري: 

التدريج: *الإنتاج

ولكن هذه المرة، نحن نتعامل مع خدمة S3 حقيقية، لذلك تحتاج إلى تقديم بيانات اعتماد AWS الأصلية.

نظرًا للمخاطر الأمنية المحتملة، من الممارسات الجيدة الاحتفاظ بالقيم السرية مثل مفاتيح الوصول خارج نظام التحكم في الإصدار الخاص بك، على سبيل المثال باستخدام متغيرات البيئة. سنستخدم ERB لحقن قيمها في ملف التكوين.

تكوين مشبك الورق

حان الوقت الآن لمواجهة Paperclip وإجباره على العمل بشكل جيد مع عميل S3 الذي تم تكوينه بالفعل. الهدف الرئيسي من تكوين مشبك الورق هو الحصول على مسار التخزين الذي سيحدد موقع الموارد التي يستضيفها الخادم المزيف:

المضيف المحلي:10001/:اسم_الدلو/:المسار

مرة أخرى، لنبدأ ببيئة التطوير:

# config/paperclip.yml

التطوير: &التطوير
    التخزين: :s3
    دلو: "التطوير"
    s3_اسم المضيف: "المضيف المحلي"
    عنوان url: ":s3_alias_url"
    المسار: ":class/:class/:attachment/:id_partition/:style/:fileename.:extension"
    s3_المضيف_الاسم المستعار: ":localhost:10001/development"

اختبار: *تطوير
# config/paperclip.yml

الإنتاج: &production
    التخزين: :s3
    دلو:  
    URL:     ":s3_domain_url"
    المسار:    ":class/:class/:مرفق/:id_partition/:style/:fileename.:extension"

التدريج: *الإنتاج

على غرار بيانات اعتماد AWS، يعتبر اسم الدلو أيضًا قيمة سرية يجب تخزينها خارج قاعدة التعليمات البرمجية الخاصة بك. أوصي بتخزين اسمه في متغير البيئة.

أخيرًا، ادمج التكوين في خيارات Paperclip الافتراضية في أداة تهيئة:

# config/initializers/paperclip.rb

paperclip_defaults = Rails.application.config_for :paperclip
paperclip_defaults.symbolize_keys!

مشبك الورق::مرفق.default_options.merge! paperclip_defaults

تشغيل التزييف3

يحتوي كل من تكوينات AWS و Paperclip على مرجع إلى خادم S3 المزيف المحلي المتوقع تشغيله تحت المضيف المحلي:10001. قبل العمل في التطوير، يجب عليك تشغيل الخادم باستخدام الأمر التالي (الذي توفره جوهرة FakeS3 gem):

تزييف 3 -r public/system -p 10001

المعلمات التي تم تمريرها هي:

إذا كنت تستخدم فورمان لإدارة العمليات في تطبيقك، فقد يكون من المناسب إضافة الإدخال التالي إلى Procfile:

# Procfile

fakes3: fakes3 -r ${FAKES3_STORAGE_PATH:-public/system} -p Continuous Integration/Continuous Deployment (CI/CD)P62T{FAKES3_PORT:-10001}

سيوفر لك ذلك الوقت الضائع في تشغيل الخادم المزيف في كل مرة ستحتاج فيها إلى تطوير بعض الميزات المتعلقة بـ S3.

الخاتمة

لقد قمنا بتهيئة عميل AWS لتفويض جميع الطلبات إلى خادم مزيف محلي، وقمنا بإعداد Paperclip لاستخدام نقطة نهاية S3 المزيفة في عناوين URL الخاصة بالمورد المُنشأة وأطلقنا الخادم المزيف الذي توفره جوهرة S3 المزيفة لتخزين جميع الملفات في نظام الملفات المحلي.

ونتيجة لذلك، أصبحنا مستقلين عن الاتصال بالإنترنت ووفرنا المال مما جعل تطويرنا أسرع وأكثر موثوقية.

arArabic