Я испытываю действительно странное поведение с Ruby DRb или, может быть, проблема в dbm. Я использую базу данных dbm с сервером и клиент, который делает запросы через DRb.Рубиновое соединение закрыто (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 = дб [ID. to_s] ', и я получил ту же самую ошибку, что и« id », которая в любом случае является строкой на стороне клиента. Она ничего не возвращает, просто вызывает ошибку, а сервер останавливается – dabadaba
В методе get_id, если вы добавьте 'p obj' между' obj = db [id.to_s] 'и' db.close', что он возвращает? – rebelshrug
ничего, сервер не работает в строке 'obj = db [id.to_s]' so anything после того, как этого не произойдет – dabadaba