Heroku で静的ページを公開する方法(Ruby)

結論

以下のファイルを用意する。

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

それぞれのファイルについて、説明します。

Gemfile

Webサーバ用に rack を入れます。

gem "rack"

Gemfile.lock

Gemfile を作ったあとに $ bundle install --path vendor/bundle をすることで自動的に生成されます。これがないと Heroku に Push したときに怒られます。

Procfile

Webサーバ を起動するために rackup の記述を行います。web: という Process Type は Heroku での予約語です。ポート番号と bind も書いておかないと外から接続できないことがありました。bind についてはさらに、指定していない場合はローカルで起動した場合に接続できないあるあるです*1

web: bundle exec rackup -p $PORT -o 0.0.0.0

config.ru

ルーティングを書きましょう。以下の書き方では、「public/ 配下が静的ファイルの置き場になり」、「ファイル名が指定されていない場合は index.html を見に行く」という設定になります。

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

public/index.html

静的ファイルを public/ 配下に置きましょう。index.html を置いてそれが表示されれば正しくデプロイできていることになります。

備考

いや、普通に GitHub Pages とか Sinatra とか使えよって話なんですがね……。

*1:Sinatra でも同様

Powered by はてなブログ