سؤال

أريد تشغيل Image معالجة Algos على الخادم الذي يمكن أن يتفاعل بسهولة مع تطبيقات الويب.تقوم شركة Algos معالجة الصور بحسب ثقيل ولن تكون متاحة في المكتبات المدمجة المخصصة.حاليا أستخدم Ruby على القضبان على Heroku لموقع الويب الخاص بي.

ماذا سيكون أفضل بنية لتحقيق ذلك؟التقاط صور من موقع الويب - تشغيل الصورة معالجة Algo على ذلك - عرض مرة أخرى على الموقع

معظم رمز معالجة الصور الخاص بي موجود على C / C ++.

هل يمكنني الاتصال برمز C / C ++ من Ruby On Rails مباشرة؟هل هذا ممكن في هيروكو؟

أو يجب أن أقوم بتصميم نظام يكشف رمز C / C ++ بعض واجهات برمجة التطبيقات التي يمكن استدعاؤها بواسطة Ruby On Rails Server؟

هل كانت مفيدة؟

المحلول

يستخدم Heroku مثيلات آلة ظاهرية صغيرة صغيرة، لذلك اعتمادا على مدى ثقيلة معالجةك، فقد لا يكون أفضل خيار للهندسة المعمارية. ومع ذلك، إذا كنت تستخدمه، فسأفعل هذا:

استخدم جوهرة مهام الخلفية للقيام بمعالجتك. لديك هذا يعمل على عملية منفصلة (يسمى عامل بدلا من Dyno في مصطلحات Heroku). المهمة المتأخرة هي حل مجربة ومختبرة لمهام الخلفية مع ثروة من المعلومات عبر الإنترنت المتعلقة بدمجها في Heroku، ولكن هناك أحدث مثل Sidekiq والتي تستخدم نظام الخيوط الجديد في الإصدارات الحديثة من Ruby. سيسمحون بكل شيء يتعين القيام به في Dyno، لكنني سأقول أنه سيكون من المفيد الحفاظ على جميع معالجة الخلفية بعيدا عن Dynos WebServer، لذلك تأخر الوظيفة (أو ما شابه).

أما بالنسبة للدمج C / C ++، لم أكن بحاجة للقيام بذلك حتى الآن. ومع ذلك، أعرف أنه من الممكن إنشاء الأحجار الكريمة التي تدمج رمز C أو C ++ وتجميعها أصلا. طالما كنت تستخدم Ruby بدلا من Jruby، لا أعتقد أن Heroku يجب أن يكون لديك مشكلة معهم. هناك طرق أخرى لإنجاز هذا، انظر إلى الأسئلة الخاصة به على وجه التحديد حول هذا الموضوع، مثل

href="https://stackoverflow.com/Questions/1542520/how-can-i-call-c-functions-from-within-ruby"> كيف يمكنني الاتصال بوظائف C ++ من داخل Ruby

يبدو أنك بحاجة إلى إنشاء ملحق، ثم قم بإنشاء جوهرة لاحتواءه. قد تساعد هذه الروابط أو لا تساعد.

http://www.rubyinside.com/how-to-create-a-ruby-Extension-in-c-in-c-c-c-in-care-5-minutes-100.html

http://guides.rubygems.org/gems-with-extensions/ هذا >

أوصي بإجراء جوهرة كما أعتقد أنه قد يكون من الصعب الحصول على مكتبات أو ملفات تنفيذية على مثيل Heroku. يمكنك تخزين GEM في دليل البائع الخاص بك إذا كنت لا ترغب في جعله علنيا.

بشكل عام سيكون لدي تحميل خادم الويب إلى S3 أو أينما كنت تخزين الصور (يمكن القيام بذلك مباشرة في المتصفح دون استخدام WebServer كحجر خطوة مع AWS JS API. إلقاء نظرة على GEMS للمساعدة .)

ثم يمكن أن يطلب خادم الويب مهمة خلفية لمعالجة الصورة.

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

أنا حقا لن أفعل كل المعالجة فقط في WebServer Dyno، إلا إذا كنت حقا تضرب هذا الشيء فقط في بعض الأحيان. مع العديد من المستخدمين الذين ضربوا عنق الزجاجة بسرعة كبيرة.

يمكن أن تقوم عملية الخلفية بتعيين علامة على صف جدول الصور حتى يتمكن خادم الويب على معرفة المستخدم عند اكتمال المعالجة. (يمكنك استطلاع للحصول على معلومات باستخدام JS على شاشة تحميل كاملة باستخدام AJAX)

بالطبع، هناك العديد من الطرق الأخرى لإنجاز هذا، اعتمادا على عدد من العوامل.

اعتذار أن الإجابة غامضة، لكن السؤال مفتوح للغاية.

حظا سعيدا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top