साथ अपेक्षा के अनुरूप काम नहीं कर रहा मैं एक रेल मॉडल में निम्नलिखित कोड है:डाटाबेस ताला रेल और Postgres
foo = Food.find(...)
foo.with_lock do
if bar = foo.bars.find_by_stuff(stuff)
# do something with bar
else
bar = foo.bars.create!
# do something with bar
end
end
लक्ष्य यह सुनिश्चित करें कि प्रकार का एक बार बनाया जा रहा दो बार नहीं बनाया जा रहा है बनाने के लिए है।
कंसोल पर with_lock कार्यों का परीक्षण मेरी अपेक्षाओं की पुष्टि करता है। हालांकि, उत्पादन में, ऐसा लगता है कि या तो कुछ या सभी मामलों में लॉक अपेक्षित काम नहीं कर रहा है, और अनावश्यक बार का प्रयास किया जा रहा है - इसलिए, with_lock (हमेशा?) परिणामस्वरूप कोड की बारी के लिए इंतजार कर रहा है ।
यहां क्या हो सकता है?
अद्यतन सभी को खेद है कि "लॉकिंग फू आपकी मदद नहीं करेगा" !! मेरे उदाहरण में शुरुआत में बार लुकअप नहीं था। यह अब तय है।
आप कहां से जांचते हैं कि एक बार पहले से मौजूद है या नहीं? –
@FrederickCheung: आप जांच क्यों परेशान करेंगे? डेटाबेस के बाहर कोई भी जांच ** हमेशा ** छेद और दौड़ की स्थिति होगी। –
मैं व्यक्तिगत रूप से नहीं करता लेकिन यह ओपी के लिए काम करने में सहायक हो सकता है कि उनकी समझ में से कौन सा समझ खराब हो। –