2013-11-26 2 views
3

내 컨트롤러는 특정 클릭에 따라 데이터를 firebase에 푸시합니다.빠른 Firebase 충돌 호출 레일

class FirebaseController < ApplicationController 

    Firebase.base_uri = "https://firebaseProject.Firebaseio.com/" 

    def call_to_firebase 

     Firebase.push("firebase_channel", "firebase_data".to_json) 

     respond_to do |format| 
     format.json { render nothing: true, :status => 204 } 
     end 
    end 
end 

클릭 할 때 호출되는이 컨트롤러를 빠르게 연속해서 호출하는 경우 내 Puma 서버가 즉시 중단됩니다. 나는 레일 4.0.0 푸마 2.6.0 루비 2.0.0

을 사용하고

다음은 생성 된 거대한 로그 보고서의 일부입니다.

ETHON: started MULTI 
ETHON:   performed EASY url= response_code=200 return_code=got_nothing total_time=2.663048 
/Users/siddharthbhagwan/.rvm/gems/ruby-2.0.0-p247/gems/ethon-0.6.1/lib/ethon/multi/operations.rb:171: [BUG] Segmentation fault 
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.3.0] 

-- Crash Report log information -------------------------------------------- 
    See Crash Report log file under the one of following: 
    * ~/Library/Logs/CrashReporter 
    * /Library/Logs/CrashReporter 
    * ~/Library/Logs/DiagnosticReports 
    * /Library/Logs/DiagnosticReports 
    the more detail of. 

-- Control frame information ----------------------------------------------- 
c:0091 p:---- s:0489 e:000488 CFUNC :multi_perform 
c:0090 p:0018 s:0484 e:000483 METHOD /Users/siddharthbhagwan/.rvm/gems/ruby-2.0.0-p247/gems/ethon-0.6.1/lib/ethon/multi/operations.rb:171 
c:0089 p:0034 s:0479 e:000478 METHOD /Users/siddharthbhagwan/.rvm/gems/ruby-2.0.0-p247/gems/ethon-0.6.1/lib/ethon/multi/operations.rb:160 
c:0088 p:0036 s:0474 e:000473 METHOD /Users/siddharthbhagwan/.rvm/gems/ruby-2.0.0-p247/gems/ethon-0.6.1/lib/ethon/multi/operations.rb:43 
c:0087 p:0020 s:0470 e:000469 METHOD /Users/siddharthbhagwan/.rvm/gems/ruby-2.0.0-p247/gems/typhoeus-0.6.6/lib/typhoeus/hydra/runnable.rb:21 
c:0086 p:0008 s:0466 e:000465 METHOD /Users/siddharthbhagwan/.rvm/gems/ruby-2.0.0-p247/gems/typhoeus-0.6.6/lib/typhoeus/hydra/memoizable.rb:51 
c:0085 p:0104 s:0463 e:000462 METHOD /Users/siddharthbhagwan/.rvm/gems/ruby-2.0.0-p247/gems/firebase-0.1.4/lib/firebase/request.rb:50 
c:0084 p:0019 s:0456 e:000455 METHOD /Users/siddharthbhagwan/.rvm/gems/ruby-2.0.0-p247/gems/firebase-0.1.4/lib/firebase/request.rb:20 
c:0083 p:0019 s:0451 e:000450 METHOD /Users/siddharthbhagwan/.rvm/gems/ruby-2.0.0-p247/gems/firebase-0.1.4/lib/firebase.rb:34 

. 
. 
. 

c:0005 p:0027 s:0029 e:000028 METHOD /Users/siddharthbhagwan/.rvm/gems/ruby-2.0.0-p247/gems/puma-2.6.0/lib/puma/server.rb:357 
c:0004 p:0035 s:0022 e:000021 BLOCK /Users/siddharthbhagwan/.rvm/gems/ruby-2.0.0-p247/gems/puma-2.6.0/lib/puma/server.rb:250 [FINISH] 
c:0003 p:---- s:0016 e:000015 CFUNC :call 
c:0002 p:0084 s:0011 e:000010 BLOCK /Users/siddharthbhagwan/.rvm/gems/ruby-2.0.0-p247/gems/puma-2.6.0/lib/puma/thread_pool.rb:92 [FINISH] 
c:0001 p:---- s:0002 e:000001 TOP [FINISH] 
. 
. 
. 
[NOTE] 
You may have encountered a bug in the Ruby interpreter or extension libraries. 
Bug reports are welcome. 
For details: http://www.ruby-lang.org/bugreport.html 

Abort trap: 6 

즉 빠르게 초당 한 번의 클릭을 의미합니다. 2 초당 1 클릭과 같이 느린 클릭에 대해서는 이러한 현상이 발생하지 않습니다.

irb에서 firebase로 루프를 밀어 넣어도이 오류가 발생하지 않습니다.

미리 감사드립니다. 건배!

+0

REST API를 래핑하는 세 번째 파트의 lib를 사용하고있는 것 같습니다. 어떤 아이디어? 스레드 안전이 아니라는 것을 빨리 추측 할 것입니다. :( – Kato

+0

Hey Kato. 컨트롤러 wrt firebase에있는 두 줄의 코드가 사용되는 유일한 firebase API입니다. 예, 스레드 안전성이 문제인 것 같습니다. – SiddharthBhagwan

답변

1

firebase-ruby gem을 사용하고 있습니까? 오늘이 문제에 대한 버그 수정을 제출했습니다. 당신은 너무 뜨거워 같은 보석에 문제가있는 방법을 재정 의하여 스스로를 패치 할 수 있습니다 :

모듈 중포 기지

클래스 요청

def process(method, path, body=nil, query_options={}) 
    request = Typhoeus::Request.new(build_url(path), 
            :body => body, 
            :method => method, 
            :params => query_options) 
    response = request.run 
    Firebase::Response.new(response) 
end 

끝 끝

을하거나 풀 요청을 기다립니다 받아 들여진다. 문제는 보석의 Typheous 'Hydra 사용에있었습니다.

관련 문제