我遇到了Ruby DRb的非常奇怪的行爲,或者問題是dbm。我正在使用帶有服務器的dbm數據庫,以及通過DRb發出請求的客戶端。關閉Ruby連接(DRb :: DRbConnError)
這裏是有問題的方法(數據庫連接是確定的),它是在服務器:
def get id
obj = nil
db = DBM.open @name
obj = db[id.to_s]
db.close
return obj
end
此行obj = db[id.to_s]
返回錯誤connection closed (DRb::DRbConnError)
在客戶端。
事情是,如果我這樣做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
我也試過'的obj = DB [ID。 to_s]'之前,我得到了完全相同的錯誤,而不僅僅是'id',它是客戶端的一個字符串,它不會返回任何內容,只會引發錯誤並且服務器停止 – dabadaba 2014-12-04 15:59:09
在get_id方法中,如果你在'obj = db [id.to_s]'和'db.close'之間添加'obj',它返回什麼? – rebelshrug 2014-12-04 16:17:22
沒有,服務器在'obj = db [id.to_s]'行崩潰之後不會發生 – dabadaba 2014-12-05 13:38:57