はじめに
Rails に慣れているとちょっとしたシンプルなサイトでも Rails で作りたくなってしまうのですが、レンタルサーバなどで Rails を動かすのは費用面でもパフォーマンス面でもいまいちだったりします。
画面生成以外にサーバ側の処理が必要ないというのが前提になりますが、ローカルで静的ファイルとして出力して、html ファイルを無料レンタルサーバにアップするという作業をしたので、残しておきます。
URL設計
Rails は、/コントローラ名/ID のようなURLになるのが基本かと思いますが、これだと静的ファイルになったときにアクセスできないので、routes.rb には下記のように拡張子 html をつけて、登録しました。
get '/comic/:id.html', to: 'comic#show'
静的ファイルの出力
実は昔も、これと同じことをやったことがあったのですが、そのときは Rails のページキャッシュを使いました。
出力したい画面の URL の Array をひたすらコールしてページキャッシュを作っていく、という方法でした。
ただ調べたところ、Rails 4 からはページキャッシュはなくなり gem として入れないといけないとのこと・・・
今回はキャッシュを使いたいというわけではないので、これだけのために gem 入れるほどでもないだろうということで、自力で出力することにしました。といっても下記の通り、簡単なコードです。
require 'open-uri'
HOST = "http://localhost:3000"
def output_html(array)
for path in array
url = HOST + path
open(url) do |html|
path = (path == "/") ? "/index.html" : path
file_path = Dir.pwd + "/html" + path
file_dir = File.split(file_path)[0]
FileUtils.mkdir_p(file_dir) unless FileTest.exist?(file_dir)
open(file_path, "w+b") do |file|
file.write(html.read)
end
end
end
end
# ここで出力したいURLの一覧の array を作成するだけ
array = Array.new
array.push "/"
array.push "/comic/2.html"
array.push "/comic/3.html"
array.push "/comic/5.html"
array.push "/comic/6.html"
output_html(array)
現状はこれでやっていますが、もっと良い手段はあるのかもしれません。
月数百円の VPS でも Rails は動かせたりするので、ケチらなければこんな作業する必要もないのですが、更新頻度が高くない静的ページだけでいけるコンテンツの場合、ありかと思います。