2008-11-03 17 views
6

Tuhaf bir sorunla karşılaşıyorum. Benim denetleyicisi bir DRB nesneDrb ve "geri dönüştürülmüş nesne" istisnası

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

çağırır ve bu DRB nesnesi bazı aramalar yapıyor.

ama bazen, bir linux ortamlarında, bir bu stacktrace ile "0xdba87b30 nesnesi geri dönüşümlü" olsun

--- 
- (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 

garip bir şey benim (windows) geliştirme makinesinde hatayı yeniden edemezler ama ben sadece linux test sunucumda (makinemde bir tane yerine 2 mongel) aldım.

Neyin var? Bence bu bir çöp toplayıcı problemi (yeniden kullanmadan önce toplanan nesne), ama nerede yanlış bir şey yaptığımı anlamıyorum. Sadece kontrol cihazımdaki nesneyi oluşturup üzerine bir yöntem çağırıyorum.

Herhangi bir fikrin var mı?

Teşekkürler! Roberto

+0

Hata göründüğü yığın izinin en üst noktasını kaçırıyor gibi görünüyorsunuz, lütfen buna dahil misiniz? – dgtized

cevap

5

Hata, toplanan çöp toplanan bir nesneye hizmet vermeye çalıştığınız anlamına gelir; bu genellikle nesnenin sunucusundaki sunucusundaki kapsam dışına çıktığı için olur.

En güvenli bahsiniz, nesnenin neden ilk etapta niçin toplandığını bulmaktır. Alternatif olarak, sunucunun uzun süre çalıştığı durumlarda genellikle kötü bir fikir olan GC.disable numaralı telefonu arayarak sunucunun GC'sini devre dışı bırakabilirsiniz.

+0

Açıkçası, söylendiği gibi, GC'yi devre dışı bırakmalısınız, ancak bunu geçici olarak yapmaya çalışmanız, sorunun sizin olup olmadığını size bildirecektir. – Almund

0

Sunucuda birden çok kez DRb.start_service çağırıyor olabilir misiniz?

İlgili konular