2008-11-03 3 views
6

ich in einem fremden Thema läuft. Mein Controller ruft ein DRB-ObjektDrb und „recycelt Objekt“ Ausnahme

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

und dieses Drb Objekt einige Recherchen macht.

aber manchmal auch in einer Linux-Umgebungen, erhalte ich ein „0xdba87b30 recycelt Objekt“ mit diesem stacktrace

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

Das Merkwürdige ist, dass ich nicht den Fehler reproduzieren kann in meiner (Fenster) Entwicklungsmaschine , aber ich bekomme es nur in meinem Linux-Testserver (2 Mischlinge statt einer in meiner Maschine).

Was ist los? Ich denke, es ist ein Garbage-Collector-Problem (Objekt vor der Wiederverwendung gesammelt), aber ich verstehe nicht, wo ich etwas falsch mache. Ich erstelle einfach das Objekt in meinem Controller und rufe eine Methode darauf auf.

Irgendeine Idee?

Danke! Roberto

+0

Sie scheinen die Spitze des Stack-Trace zu fehlen, wo es tatsächlich den Fehler zeigt, könnten Sie bitte, dass ein? – dgtized

Antwort

5

Der Fehler bedeutet, dass Sie versuchen, ein Objekt zu liefern, das als Garbage Collected erfasst wurde, was normalerweise geschieht, weil das Objekt auf dem Server den Gültigkeitsbereich überschritten hat.

Ihre sicherste Wette ist, herauszufinden, warum das Objekt vorzeitig Garbage Collection war in erster Linie. Alternativ können Sie den GC des Servers deaktivieren, indem Sie GC.disable aufrufen, was normalerweise eine schlechte Idee ist, besonders wenn Ihr Server lange läuft.

+0

Offensichtlich sollten Sie, wie gesagt, den GC nicht deaktivieren, aber wenn Sie dies vorübergehend tun, werden Sie wissen, ob dies Ihr Problem ist – Almund

0

Ist es möglich, Sie DRb.start_service mehr als einmal in dem Server anrufen?

Verwandte Themen