Хитрость заключается в замене / удалении несериализуемых объектов (особенно в env-hash).Я реализовал части этого в этот SO ответ .Я немного обновил свой подход, используя объект rails 3.2.13 request
.
##
# build a serializable hash out of the given request object
def make_request_serializable(request)
request_hash = {
:env => request.env.clone,
:filtered_parameters => request.filtered_parameters.clone,
:fullpath => request.fullpath,
:method => request.method,
:request_method => request.request_method
}
#clean up the env-hash, as it contains not serializable objects
request_hash[:env].tap do |env|
env.delete "action_dispatch.routes"
env.delete "action_dispatch.logger"
env.delete "action_controller.instance"
env.delete "rack.errors"
env["action_dispatch.remote_ip"] = env["action_dispatch.remote_ip"].to_s
end
request_hash
end
# later in the controller
puts make_request_serializable(request).to_json
#=> {"env":{"SERVER_SOFTWARE":"thin 1.5.1 codename Straight Razor","SERVER_NAME":"localhost","rack.input":[],"rack.version":[1,0], ... (shortened, as it's a lot of output)
Обновление : теперь я только что видел, что вы спрашиваете vor Rails 2.3.14
.Мой визуальный фильтр позволил мне увидеть 3.2.14
.Так что это работает только для текущей версии рельсов, извините.