سؤال

لدي روبي على القضبان الموقع الذي يجعل HTTP المكالمات إلى خدمة ويب خارجية.

عن مرة واحدة في اليوم أحصل على SystemExit (stacktrace أدناه) خطأ في البريد الإلكتروني حيث استدعاء الخدمة قد فشلت.إذا كنت ثم حاول نفس الاستعلام على موقعي بعد لحظات أنه يعمل بشكل جيد.كما حدث مع موقع ذهب العيش و ليس لدي حظ في تعقب ما هي أسباب ذلك.

روبي هو الإصدار 1.8.6 و القضبان هو الإصدار 1.2.6.

أي شخص آخر لديه هذه المشكلة ؟

هذا هو الخطأ stacktrace.

أ SystemExit وقعت /usr/local/lib/روبي/الأحجار الكريمة/1.8/الأحجار الكريمة/القضبان-1.2.6/lib/fcgi_handler.rb:116:في مخرج' /usr/local/lib/روبي/الأحجار الكريمة/1.8/الأحجار الكريمة/القضبان-1.2.6/lib/fcgi_handler.rb:116:في exit_now_handler' /usr/local/lib/روبي/الأحجار الكريمة/1.8/الأحجار الكريمة/activesupport-1.4.4/lib/active_support/inflector.rb:250:في to_proc' /usr/local/lib/روبي/1.8/net/البروتوكول.rb:133:في الدعوة' /usr/local/lib/روبي/1.8/net/البروتوكول.rb:133:في sysread' /usr/local/lib/روبي/1.8/net/البروتوكول.rb:133:في rbuf_fill' /usr/local/lib/روبي/1.8/مهلة.rb:56:في مهلة' /usr/local/lib/روبي/1.8/مهلة.rb:76:في مهلة' /usr/local/lib/روبي/1.8/net/البروتوكول.rb:132:في rbuf_fill' /usr/local/lib/روبي/1.8/net/البروتوكول.rb:116:في readuntil' /usr/local/lib/روبي/1.8/net/البروتوكول.rb:126:في readline' /usr/local/lib/روبي/1.8/net/http.rb:2017:في read_status_line' /usr/local/lib/روبي/1.8/net/http.rb:2006:في read_new' /usr/local/lib/روبي/1.8/net/http.rb:1047:في طلب' /usr/local/lib/روبي/1.8/net/http.rb:945:في request_get' /usr/local/lib/روبي/1.8/net/http.rb:380:في get_response' /usr/local/lib/روبي/1.8/net/http.rb:543:في البداية' /usr/local/lib/روبي/1.8/net/http.rb:379:في get_response'

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

المحلول

باستخدام fcgi مع روبي هو معروف أن تكون عربات التي تجرها الدواب جدا.

تقريبا الجميع قد انتقلت إلى الهجين لهذا السبب فإنني أوصي لكم تفعل الشيء نفسه.

نصائح أخرى

انها كانت فترة من الوقت منذ أن كنت تستخدم FCGI ولكن أعتقد FCGI عملية رمي SystemExit إذا ما الخيط كان يأخذ وقتا طويلا.هذا يمكن أن يكون خدمة ويب لا يستجيب أو حتى بطيئة استعلام DNS.بعض نتائج جوجل تظهر خطأ مشابهة مع الثعبان FCGI حتى تتحرك إلى هجين سيكون فكرة جيدة. هذا المنصب هو إشارة اعتدت أن الإعداد الهجين وأنا لا تزال تشير إلى ذلك.

اعتدت على هذه في كل وقت على Apache1/fastcgi.أعتقد أنه بسبب fastcgi شنقا حتى قبل روبي هو القيام به.

التحول إلى هجين هو خطوة أولى جيدة ، ولكن هناك المزيد للقيام به.إنها فكرة سيئة أن إعدام من خدمات ويب على صفحة خاصة من القضبان.القضبان ليس مؤشر الترابط-الآمن.عدد الاتصالات المتزامنة التي يمكن أن تدعم يساوي عدد النغول (أو الركاب العمليات) في نظام المجموعة الخاصة بك.

إذا كان لديك واحد هجين و شخص يصل إلى الصفحة التي تدعو خدمة ويب التي تستغرق 10 ثواني الوقت, كل طلب إلى موقع الويب الخاص بك سوف مهلة خلال ذلك الوقت.معظم موازنات التحميل فقط من خلال دورة الخاص بك النغول عمياء, حتى إذا كان لديك اثنين من النغول كل طلب المهلة.

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

بديل آخر ، اعتمادا على طبيعة التطبيق الخاص بك هو إعدام خدمة كل ن دقيقة عبر كرون, ذاكرة التخزين المؤقت البيانات محليا ، يعيش قراءة الصفحة من ذاكرة التخزين المؤقت.

أود أيضا أن تأخذ نظرة على الركاب.أنه من الأسهل كثيرا أن أذهب من الحل التقليدي من Apache/nginx + الهجين.

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