2011-07-21 74 views
2

我已經在軌道上的網站紅寶石。該頁面是使用ruby和rails動態加載和生成的。不過,我想也生成靜態html的網頁,以減輕我的服務器,而不是每次調用軌頁。從Ruby on Rails的輸出HTML保存到一個變量

在PHP我知道如何使用ob_start()和ob_get_contents()來獲取輸出文本捕獲輸出緩衝區。

如何捕獲輸出從我的軌頁面到一個變量?

編輯:我想這樣做的原因是,我能救我的頁面html的用於在其他機器上使用。所以我使用ruby生成HTML並以他們可以查看的格式分發給其他人。

回答

8

您應該使用Rails caching實現這一結果。它實現了你正在尋找的目標。

或者,您可以render_to_string和輸出使用呈現結果:

#ticket_controller.rb 
def TicketController < ApplicationController 

    def show_ticket 
    @ticket = Ticket.find(params[:id]) 

    res = render_to_string :action => :show_ticket 
    #... cache result-- you may want to adjust this path based on your needs 
    #This is similar to what Rails caching does 
    #Finally, you should note that most Rails servers serve files from 
    # the /public directory without ever invoking Rails proper 

    File.open("#{RAILS_ROOT}/public/#{params[:action]}.html", 'w') {|f| f.write(res) } 
    # or .. File.open("#{RAILS_ROOT}/public/#{params[:controller]}/#{params[:action]}/#{params[:id]}.html", 'w') {|f| f.write(res) } 
    # or .. File.open("#{RAILS_ROOT}/snapshots/#{params[:controller]}/#{params[:action]}/#{params[:id]}.html", 'w') {|f| f.write(res) } 
    render :text => res 
    end 
end 
+0

我想這就是我一直在尋找。你能給出更多這個render_to_string的用例嗎?基本上我正在尋找將頁面加載的整個輸出保存到.html文件。 –

+0

render_to_string應該給你你正在尋找的所有的Rails將給予瀏覽器的HTML,包括佈局。您可以輕鬆將其保存到文件中。 – ghayes

+0

這是哪裏呢?在控制器中?在視圖中? –

0

我結束了以下準備:

@page_data = render_to_string() # read the entire page's output to string 

if (File.exist?('../cache.html')) 
    file = File.open('../cache.html','rb') 
    contents = file.read 
else 
    contents = '' 
end 
if (@page_data!=contents) # if the page has changed 
    # save the output to an html version of the page 
    File.open('../cache.html','w') {|f| f.write(@page_data) } 
end