我在使用Ruby DRb时遇到了非常奇怪的行为,或者问题出在dbm上。我正在使用带有服务器的dbm数据库和一个通过DRb发出请求的客户端。
下面是出现问题的方法(数据库连接正常),它在服务器中:
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)。
问题是,如果我这样做,它就会工作得很好('1‘是obj = db['1']中的一个键)。这一切为什么要发生?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发布于 2014-12-04 23:14:44
在/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]返回什么?
发布于 2016-02-21 08:20:58
尝试修补您的ruby,以便为您提供更多有关关系服务器端错误的详细信息。
请参阅:https://github.com/ruby/ruby/pull/1260
在我的例子中,这是一个声明safe_level的问题,然后我调用的一些代码最终违反了安全性(即进行了一个“危险的调用”)。
https://stackoverflow.com/questions/27293817
复制相似问题