1

As part of the deployment process for our rails 2.3 app, I'd like to save static versions of our error pages to the public folder. How do I get the rendered output of a controller's action without visiting the web page? I know it can be done because the functional tests do it - if I say

get :errors, :id => 404

then the body is in @response.body. I suppose I could just copy the code out of ActionController::TestCase, but I'm hoping that there's a simpler way to do it.

Simon
  • 25,468
  • 44
  • 152
  • 266
  • I wonder if page caching would work here so the page is generated on first hit, or are you concerned that a 404 means your app is pretty broken so you can't rely on the Rails stack? – Steve Ross Nov 05 '10 at 19:03
  • Yeah - I want something to display if, say, all the mongrels are busy. – Simon Nov 06 '10 at 09:57

1 Answers1

1

In the end I did just go into ActionController::TestCase, and this is what I dug out:

def get_content host, path, filename
  request = ActionController::Request.new 'HTTP_HOST' => host,
                                          'REQUEST_URI' => path,
                                          'REQUEST_METHOD' => 'GET',
                                          'rack.input' => '',
                                          'rack.url_scheme' => 'http'

  controller = ActionController::Routing::Routes.recognize(request).new
  response = ActionController::Response.new
  controller.process request, response
  return response.body
end
Simon
  • 25,468
  • 44
  • 152
  • 266