LoginSignup
16
18

More than 5 years have passed since last update.

HerokuにRackでdeployする(初級編:静的HTMLページ)

Last updated at Posted at 2014-04-04

私は自作Webアプリケーションの公開にHerokuを利用しています。Ruby on Rails tutorialにHerokuデプロイの入門編があり、最初はこれで勉強しました。

Ruby on Railsで開発している場合はこの本の通りにやればできます。しかし(昔のレンタルサーバのように)単純に静的なHTMLをアップしたい場合が逆に分かりません。Railsではstaticディレクトリに送れば可能ですが、わざわざこのためにRailsを使うのはいくら何でも重すぎる感じがします。

Sinatraを使えばずっと身軽になると思いますが、私はSinatraについてよく知りません。

ここではRackを使う方法を紹介します。RackはRuby on Railsのコアモジュールに採用されており、最下層のHTTP処理を担当しています。今回はそのRackだけを使うRubyベースでは最軽量のHerokuデプロイ方法です。

Gemfileの設定

Herokuのデプロイではバージョン管理にBundlerが用いられています(Bundlerをインストールしていない人はRuby on Rails Tutorialの1章を参照して下さい)。

まずGemfileを作成します。Rails Tutorialに比べると嘘みたいに短いですがこれだけでOKです。ruby 2.0.0の部分は実際に自分が使っているRubyバージョンを指定します。

Gemfile
source 'https://rubygems.org'
ruby 2.0.0
gem 'rack'

Rubyバージョン指定はなくても動きますが、省略するとHerokuがdeploy時にwarningを表示します。Rackは十分安定しているのでバージョン指定不要ですが、もし万一deployで問題を生じた場合はgem 'rack', '1.5.1'のように指定して下さい。

Gemfileを作ったらbundle installを実行してGemfile.lockを生成します。

config.ruの設定

次にconfig.ruを設定しますが、ここでプロジェクトディレクトリの構造を決めておきます。HTMLファイルはpublicディレクトリの中に配置することにします。

public/
    index.html
    ...
Gemfile
Gemfile.lock
config.ru

config.ruは公開方法によっていくつかバリエーションがあります。まずディレクトリへのアクセスに対してリスティング表示する場合はRack::Directoryを使います(開発中のテスト時に便利)。

config.ru
run Rack::Directory.new 'public'

ディレクトリは公開せず、publicディレクトリ内部のファイルアクセスだけ提供する場合はRack::Fileを用います。

config.ru
run Rack::File.new 'public'

さらにディレクトリへのアクセスをindex.htmlに割り当てる場合の例を示します。

config.ru
use Rack::Static, urls: [''], root: 'public', index: 'index.html'
run lambda {|env|}

なお小さな不具合があります。サブディレクトリdocにpublic/doc/index.htmlがあった場合、http://.../doc/のように末尾に/を付けないと動作しません。ルートのindex.htmlに対してはこの問題は発生しません。

ローカルサーバ立ち上げ

開発時はrackupコマンドでlocalhost:9292にローカルサーバを立ち上げることができます。ポート番号はrackup -p 8888のように指定できます。

Herokuへのデプロイ

この状態でそのままHerokuにdeployすれば完了です。gitやHerokuの操作方法はRuby on Rails Tutorialの1章を参照して下さい。

16
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
18