如何将我的rails应用程序转换为静态内容?

时间:2012-06-01 17:36:10

标签: ruby ruby-on-rails-3

我的rails应用程序每天提取一次xml提要,将它们加载到数据库中,然后以聚合方式显示它们。我想我可以节省服务器内存,如果我只是将页面输出为静态文件并让它们直接由前端服务器(在我的情况下为nginx)提供。我在一个IRC房间询问并被告知不使用rails并使用rake任务创建文件。但是,我想知道最简单的方法是做什么。布局,资产文件和内容显然位于rails的不同位置,所以我想我需要结合布局和内容然后插入css / javascript。

欢迎任何想法/想法。

[解决]

我最终使用render_to_string from a rake task中的示例并进行了一些调整,以便在我的rake任务中获得以下代码:

views_path = Rails.root.to_s + "/app/views"
av = ActionView::Base.new(views_path)
av.class_eval do
  include ApplicationHelper
end

products = Product.all
a = av.render(:template => "products/show", :layout => "layouts/application", :locals => { :@products => products } )

然后渲染模板和布局,并允许在模板中使用@products实例变量,就像使用控制器一样。

然后我只需要将渲染的输出写入文件。

2 个答案:

答案 0 :(得分:0)

对于此类任务,您可以使用Rails' built in caching mechanisms

another stack overflow post显示了一些示例代码,说明如何构建代码以从rake任务中手动编写缓存。

答案 1 :(得分:0)

可以使用middlemanjekyll吗?

我只使用了中间人,但您可以使用rake任务和支持脚本来获取最新的xml提要并将其粘贴到middlemans数据目录(即data/feeds.yml),然后使用现有的布局来呈现yaml文件。 Middleman和rails共享很多类似的技术用于渲染等。

您必须稍微修改一下布局。

如果你愿意,你可能会找到用其他东西替换yaml的宝石。