Rails 2.3.14:如何序列化ActionController :: Request对象?

我需要根据Rails 2.3.14控制器收到的请求对象的类型编写一些Do Things方法。 但是,我不想启动整个应用程序,甚至也不需要控制器; 我想只有一个这样的对象的编组副本,我可以在Rails环境之外工作。

不幸的是,传递给控制器​​的ActionController::Request对象在其内部深处包含Proc对象,这些对象本质上是不可序的。

有没有人知道一种方法来序列化这些对象之一,以便我可以将它存储在一个数据文件中并在另一个脚本中重新创建它? 我宁愿不修补Proc类来提供#marshal_dump方法..

谢谢!

诀窍是替换/删除不可序列化的对象(特别是在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) 

更新 :owww,我刚看到你问的是vor Rails 2.3.14 。 我的视觉filter让我看到3.2.14 。 所以这只适用于当前的rails版本,抱歉。