2014-12-04 12 views
1

Ruby DRb에서 정말 이상한 동작이 발생했거나 문제가 dbm 일 수 있습니다. dbb 데이터베이스를 서버와 함께 사용하고 DRb를 통해 요청을하는 클라이언트를 사용하고 있습니다.Ruby 연결이 닫혔습니다 (DRb :: DRbConnError)

가 여기에 문제를 가진 방법이다 (데이터베이스 연결 괜찮습니다) 그리고 서버에 있습니다

def get id 
    obj = nil 
    db = DBM.open @name 
    obj = db[id.to_s] 
    db.close 
    return obj 
end 

클라이언트 측에서 오류 connection closed (DRb::DRbConnError)를 반환 obj = db[id.to_s]이 줄.

내가이 일을한다면 obj = db['1'] 그것은 잘 작동합니다 ('1'은 dbm의 키입니다). 왜 이런 일이 생길까요? id의 문제점은 무엇입니까? 다음은 클라이언트 측의 호출입니다.

DRb.start_service 
r = DRbObject.new_with_uri(SERVER_URI) 
puts r.get '1' 

왜이 오류가 발생합니까? 같은 일이이 방법으로 발생 : 연결 오류가 발생 폐쇄와 같은

def delete id 
    db = DBM.open @name 
    db.delete id 
    db.close 
end 

답변

0

/lib/drb/drb.rb에서는 찾을 때 sz.nil?str.nil.

raise(DRbConnError, 'connection closed') if sz.nil? 

raise(DRbConnError, 'connection closed') if str.nil? 

무엇을 obj = db[id.to_s] 반환합니까?

+0

. to_s]'이전에 "id"(클라이언트 측 문자열)와 똑같은 오류가 발생했습니다. 아무 것도 반환하지 않고 단지 오류가 발생하고 서버가 멈 춥니 다. – dabadaba

+0

get_id 메소드에서 'obj = db [id.to_s]'와'db.close' 사이에'p obj'를 추가하면 무엇을 반환합니까? – rebelshrug

+0

아무것도 없으면 서버가'obj = db [id.to_s]'줄에서 충돌합니다. 그것은 일어나지 않을 것이다 후에 – dabadaba

0

관계의 서버 쪽에서 오류에 대한 자세한 내용을 알려면 루비에 패치를 적용 해보십시오.

참조 : https://github.com/ruby/ruby/pull/1260. 내 경우

그것은 (는 "위험 전화를 즉 만들기) 그때는 보안을 위반 결국라는 코드의 일부를 safe_level 및 선언에 문제가 있었다. 나는 또한`OBJ = 데시벨 [ID를 시도