我需要捕获HTTP响应,就像它离开rails并重写一样,如下所示:
EG。对于所有响应,将其状态设置为根节点,然后重写其标题:
HTTP/1.1 404 Not Found
Content-Type:text/html
This page was not found
进入这个:
HTTP/1.1 200 OK
Content-Type: text/html
<status='404'>
This page was not found
</status>
背景: 将Rails 3与Flash客户端一起使用。
由于浏览器的限制,无法保证HTTP 200以外的任何其他内容都能传递到客户端。有些允许201到,但不是全部。此外,任何标题都会在大部分时间被删除,只有身体才能通过。
答案 0 :(得分:1)
我会使用Rack-Middleware,因为它很容易处理标题并重写正文。
把它放进app/middleware/flashfix.rb
class FlashFix
def initialize(app)
@app = app
end
def call(env)
status, headers, response = @app.call(env)
if status == 404
[200, headers, "<status='404'>" + response.body + "</status>"]
else
[status, headers, response]
end
end
end
这只是检查Rails是否返回状态代码为“404”的响应,然后相应地重写响应。 然后在一个初始化器中:
# Loops through all middlewares and requires them
Dir[File.join(Rails.root,"app/middleware/*.rb")].each do |middleware|
require middleware
end
使用中间件,您需要做的就是告诉Rails使用它
class Application < Rails::Application
config.middleware.use "FlashFix"
end
如果您不熟悉Rack,我建议http://guides.rubyonrails.org/rails_on_rack.html