मुझे थ्रेडेड रेल ऐप लिखना है क्योंकि मैं इसे Neo4j.rb के ऊपर चला रहा हूं, जो रेल प्रक्रिया के अंदर एक नियो 4 जी ग्राफ डेटाबेस एम्बेड करता है, और इस प्रकार मुझे उसी प्रक्रिया से कई अनुरोधों को पूरा करना होगा। हाँ, यह अच्छा होगा अगर Neo4j डेटाबेस से कनेक्ट करने से SQL डेटाबेस की तरह काम किया जाता है, लेकिन ऐसा नहीं होता है, इसलिए मैं शिकायत छोड़ दूंगा और इसका उपयोग करूँगा।थ्रेड-सुरक्षित रेल नियंत्रक क्रियाएं - उदाहरण आवृत्ति सेट करना?
मैं समवर्ती कोड (जैसा कि मुझे होना चाहिए) लिखने के प्रभावों के बारे में काफी चिंतित हूं, और सामान्य सामान्य परिदृश्य को संभालने के तरीके पर कुछ सलाह चाहिए - नियंत्रक एक उदाहरण चर या सत्र हैश में एक चर सेट करता है , तो कुछ चीजें होती हैं।
# THIS IS NOT REAL PRODUCTION CODE
# I don't do this in real life, it is just to help me ask my question, I
# know about one-way hashing, etc.!
class SessionsController
def create
user = User.find_by_email_and_password(params[:email], params[:password])
raise 'auth error' unless user
session[:current_user_id] = user.id
redirect_to :controller => 'current_user', :action => 'show'
end
end
class CurrentUserController
def show
@current_user = User.find(session[:current_user_id])
render :action => :show # .html.erb file that uses @current_user
end
end
प्रश्न: इस कोड में किसी भी जाति की स्थिति प्रदर्शित करने के लिए कर रहे हैं कि मैं क्या मतलब निम्नलिखित कच्चे कोड पर विचार करें?
सत्र नियंत्रक में, session
हैश और params
हैश थ्रेड-लोकल हैं? मान लें कि एक ही ब्राउज़र सत्र अलग-अलग प्रमाण-पत्रों के साथ/सत्र # बनाने (रेल मार्ग सिंटैक्स उधार लेने के लिए) के लिए कई अनुरोध करता है, लॉग इन करने वाले उपयोगकर्ता को अनुरोध होना चाहिए कि पिछले session[:current_user_id] = user.id
पंक्ति को हिट करें? या क्या मुझे नियंत्रक कार्रवाई के चारों ओर एक म्यूटेक्स लॉक लपेटना चाहिए?
CurrentUserController में, यदि अलग-अलग सत्रों के साथ दो अनुरोधों के साथ शो एक्शन एक साथ मारा जाता है, तो क्या वही @current_user चर दोनों द्वारा सेट किया जाएगा? अर्थात। पहला अनुरोध होगा, क्योंकि यह .html.erb फ़ाइल को संसाधित कर रहा है, यह पता लगाएं कि यह @current_user इंस्टेंस वैरिएबल को दूसरे थ्रेड द्वारा अचानक बदल दिया गया है?
धन्यवाद
यह एक पुराना धागा है, क्षमा करें। लेकिन मेरे पास एक फॉलो अप है। इससे बहुत समझदारी होती है (और क्यों लोग कंट्रोलर विधियों में @ variables के बारे में चिंता नहीं करते हैं। हालांकि अगर यह सच है, तो मैं इस बात से उलझन में हूं कि इस लड़के को अपने काउंटर के साथ समस्याएं कैसे थीं http://tenderlovemaking.com/2012/ 06/18/हटाने-config-threadsafe.html –
@ पोस्टर काउंटर में @ ओलिवरशॉ एक क्लास इंस्टेंस वैरिएबल है (क्योंकि यह 'क्लास << स्वयं' ब्लॉक में है), इसलिए सभी अनुरोध एक ही काउंटर –
आ रहे हैं रूबी पर वापस। मुझे क्लास वेरिएबल्स याद आएगा, लेकिन क्लास इंस्टेंस वैरिएबल नहीं। धन्यवाद! –