rest - Store thread-safe global request specific data with Rails -


बहुत सारे रेल ऐप मैं काम करता हूं कुछ अनुरोध विशिष्ट पैरामीटर ( request_api_version पर निर्भर करता है, client_ip , device_id , ...)।

अब के लिए ये पैरामीटर प्रत्येक विधि कॉल में पास किए गए हैं। यह बहुत भारी है

हालांकि मैं MyApp.request_api_version जैसे वैश्विक वैरिएबल के बारे में जानता हूं, लेकिन मुझे यह नहीं दिखाई देता है कि यह डेटा कहीं पर संग्रहीत करने के लिए एक धागा-सुरक्षित स्मार्ट तरीका है? अच्छा अभ्यास के रूप में (धागा-सुरक्षित, ...)।

कोई अन्य विकल्प?

tl; dr का उपयोग करें।

लंबी संस्करण: रुबी में धागे के प्रकार की तरह व्यवहार करता है (वे [] और [] = ), और आप वर्तमान धागे को थ्रेड। कंवरेंट के माध्यम से एक्सेस कर सकते हैं। यह आपको कंट्रोलर में Thread.current [: client_ip] = request.ip की तरह सामान करने देता है, फिर client_ip = थ्रेड.current [: client_ip] अपने मॉडल में। यह तब तक बहुत अच्छा काम करता है जब तक कि ऐप सर्वर किसी दूसरे अनुरोध को संभालने के लिए किसी धागे को पुनः उपयोग नहीं करता। फिर अराजकता बन जाती है और ब्रह्मांड नष्ट हो जाता है (या कुछ चीज)।

अनुरोध की गई रंजक एक विशेष मिडलवेयर में हर अनुरोध को लपेटकर यह संभालता है कि आप HTTP प्रतिक्रिया को भेजे जाने के बाद जो कुछ भी "साफ करते हैं" भेजा गया है। यह अपने आप को लागू करने के लिए बहुत तुच्छ है, खासकर यदि आप केवल कुछ चर का प्रयोग कर रहे हैं अगर आप अधिक आम तौर पर उपयोगी समाधान चाहते हैं, तो बस मणि का उपयोग करें।

Comments