2011-07-21 27 views
2

私はRubyのウェブサイトを持っています。ページは、ルビとレールを使用して動的にロードされ、生成されます。しかし、私は毎回レールページを呼び出すのではなく、静的な.htmlページを生成してサーバーを簡単にしたいと考えています。ルビーのhtmlからの出力を変数に出力

私は、出力バッファを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