Hi everyone,
In my application (for producing pdf reports), I need to render some
rhtml templates to html files on the disk, because I then push them
through apache fop and css2xslfo to produce a neat (not so little) pdf
out of my html+css combo, ready for print :). That said, the whole
process of calculating the figures, rendering the html and then
producing the pdf takes about 5min on my dev box, and still about 2min
on my production server. Needless to say, I want this to run in a
BackgrounDrb worker (thx for this wonderful plugin btw
Since rendering the html file alone takes up almost 1 minute (intense db and svg image creation included), I need to put this call to ActionController#render in a background worker. As there is no way to access the controller in a backgroundrb worker (as far as i know), I am looking for a generic way to use ActionPack/View outside of a Rails controller. Currently I have a rather ugly approach, that lets me render my templates/partials from anywhere (from my model class atm) BUT, layouts don't work, since they seem to be implemented in ActionController. My current code is as follows:
def render(options, assigns = {})
ActionView::Base.class_eval do require 'rubygems' require 'RMagick' require 'scruffy' require 'application'
include ApplicationHelper include Admin::AdminHelper include Admin::ReportsHelper include Admin::SurveyCalculationsHelper end
viewer = ActionView::Base.new(Rails::Configuration.new.view_path, assigns, Admin::SurveyCalculationsController.new) viewer.render options end
As I said, ugly! With all those class_eval includes and requires, a call to the above render method, correctly renders my partial (along with local vars passed). However, my partials yield to different places in the layout, using content_for, so it's not convenient to just wrap my partial code with what is now the layout file.
Does anyone know how to do ActionController style render with layout/ partial/localvar support outside of a ActionController instance?
Any help appreciated!
Martin Gamsjaeger