2008-11-03 10 views
6

मैं एक अजीब मुद्दे में चल रहा हूं। मेरे नियंत्रक एक DRB वस्तुड्रब और "रीसाइक्लिंग ऑब्जेक्ट" अपवाद

@request_handler = DRbObject.new(nil, url) 
availability_result = @request_handler.fetch_availability(request, @reservation_search, params[:selected_room_rates]) 

कॉल करता है और इस Drb वस्तु कुछ खोज कर रही है।

लेकिन कभी कभी, एक लिनक्स वातावरण में, मैं एक इस स्टैकट्रेस के साथ "0xdba87b30 वस्तु पुनर्नवीनीकरण"

--- 
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:375:in `_id2ref' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:375:in `to_obj' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1402:in `to_obj' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1704:in `to_obj' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:613:in `recv_request' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:911:in `recv_request' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1530:in `init_with_client' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1542:in `setup_message' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1494:in `perform' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1589:in `main_loop' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1585:in `loop' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1585:in `main_loop' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1581:in `start' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1581:in `main_loop' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1430:in `run' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1427:in `start' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1427:in `run' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1347:in `initialize' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1627:in `new' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/1.8/drb/drb.rb:1627:in `start_service' 
- (druby://10.254.143.159:9001) ./core/request_handler.rb:244 
- (druby://10.254.143.159:9001) /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require' 
- (druby://10.254.143.159:9001) /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:27:in `require' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/dependencies.rb:510:in `require' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/dependencies.rb:355:in `new_constants_in' 
- (druby://10.254.143.159:9001) /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/dependencies.rb:510:in `require' 
- (druby://10.254.143.159:9001) core/request_handler.rb:31 
- (druby://10.254.143.159:9001) core/request_handler.rb:29:in `each' 
- (druby://10.254.143.159:9001) core/request_handler.rb:29 
- app/drops/room_drop.rb:18:in `room_rates' 
- lib/liquid/liquid_templates.rb:47:in `parse_template' 
- lib/liquid/liquid_templates.rb:21:in `render_liquid_template_without_layout' 
- app/helpers/skins_helper.rb:6:in `render_respond_by_format' 
- app/helpers/skins_helper.rb:4:in `render_respond_by_format' 
- app/helpers/skins_helper.rb:25:in `render_availability_action' 
- app/controllers/web_reservations_controller.rb:109:in `availability_simplified' 
- /usr/bin/mongrel_rails:19:in `load' 
- /usr/bin/mongrel_rails:19 

अजीब बात है कि मैं अपने (विंडोज़) विकास मशीन में त्रुटि पुन: पेश नहीं कर सकता है , लेकिन मुझे यह केवल मेरे लिनक्स परीक्षण सर्वर (मेरी मशीन में से एक के बजाय 2 mongrels) में मिलता है।

क्या गलत है? मुझे लगता है कि यह एक कचरा कलेक्टर समस्या है (इसे पुन: उपयोग करने से पहले एकत्रित वस्तु), लेकिन मुझे समझ में नहीं आता कि मैं कुछ गलत कह रहा हूं। मैं बस अपने नियंत्रक में ऑब्जेक्ट बना देता हूं और उस पर एक विधि कॉल करता हूं।

कोई विचार?

धन्यवाद! रॉबर्टो

+0

आपको लगता है कि यह वास्तव में त्रुटि दिखाता है, जहां आप वास्तव में त्रुटि दिखाते हैं, क्या आप इसे शामिल कर सकते हैं? – dgtized

उत्तर

5

त्रुटि का मतलब है कि आप उस ऑब्जेक्ट की सेवा करने की कोशिश कर रहे हैं जो कचरा इकट्ठा किया गया है, जो आमतौर पर होता है क्योंकि ऑब्जेक्ट सर्वर पर दायरे से बाहर चला गया।

आपकी सबसे सुरक्षित शर्त यह पता लग रही है कि ऑब्जेक्ट समय-समय पर कचरा-संग्रह क्यों हुआ था। वैकल्पिक रूप से, आप GC.disable पर कॉल करके सर्वर के जीसी को अक्षम कर सकते हैं, जो आम तौर पर एक बुरा विचार है, खासकर यदि आपका सर्वर लंबे समय से चल रहा है।

+0

जाहिर है, जैसा कि कहा गया है, आपको जीसी को _not_ अक्षम नहीं करना चाहिए, लेकिन अस्थायी रूप से ऐसा करने का प्रयास करना आपको यह बताएगा कि यह आपका मुद्दा है या नहीं – Almund

0

क्या यह संभव है कि आप सर्वर में एक से अधिक बार DRb.start_service को कॉल कर रहे हों?

संबंधित मुद्दे