मेरी फोटो कक्षा में मेरे पास यह सहयोग है।रेल लॉक किए बिना सक्रिय रिकॉर्ड ऑब्जेक्ट को कैसे स्पर्श करें?
belongs_to :user, :touch => true
एक दिन मुझे यह अपवाद मिला।
A ActiveRecord::StatementInvalid occurred in photos#update:
Mysql::Error: Deadlock found when trying to get lock; try restarting transaction:
UPDATE `users` SET `updated_at` = '2011-09-20 14:17:44' WHERE `users`.`id` = 6832
production/ruby/1.8/gems/activerecord-3.0.10/lib/active_record/connection_adapters/abstract_adapter.rb:207:in `log'
ऐसा होने से भविष्य के अपवादों को रोकने के लिए मुझे क्या करना चाहिए? यदि संभव हो तो लॉकिंग का उपयोग न करने के लिए त्रुटि में दिखाए गए अद्यतन कथन को मैं चाहता हूं। मुझे नहीं लगता कि आशावादी लॉकिंग का उपयोग इस मामले में काम करेगा क्योंकि आशावादी लॉकिंग शायद इसके बजाय ActiveRecord :: StaleObjectError को बढ़ाएगी।
उत्तर के लिए धन्यवाद। यह 2 साल बाद है और मुझे पूरी तरह से यकीन नहीं है कि मैं स्पर्श का उपयोग क्यों कर रहा था। कैश को अमान्य करना एक अच्छे कारण की तरह लगता है। अब मैं कैश प्रविष्टियों की अवधि समाप्त करने के लिए स्वीपर का उपयोग करता हूं। http://guides.rubyonrails.org/caching_with_rails.html#sweepers। मैं अब कहीं भी स्पर्श का उपयोग नहीं करता हूं। –
मुझे valid_from का विचार पसंद है, लेकिन मुझे लगता है कि आपको क्लास नाम को cache_key में भी जोड़ना होगा, उदाहरण के लिए [वर्ग]/[id] - [timestamp] http://signalvnoise.com/posts/3113- कैसे-कुंजी आधारित-संचय-समाप्ति-काम करता है – iheggie