2015年7月6日月曜日

Heroku で Sinatra + Rack アプリを動かしてみた

概要

Sinatra で作成したアプリを Rack で動くようにして Heroku 上でも動作するようにしてみました
簡単にできたので紹介します
サンプルとして紹介するアプリはこちらです

環境

  • CentOS 6.6 64bit
  • Ruby 2.2.0p61
  • Sinatra 1.4.6
  • Rack 1.6.1
  • Heroku Toolbelt 3.39.1

Sinatra アプリの作成

何でもOKです
この辺を参考にすればあっさり作成できると思います
ruby app.rbで起動してポート4567でLISTENするアプリを作成できればOKです

Sinatra アプリを Rack で動作させる

config.ru の作成

config.rurackupという Rack のコマンドでアプリを起動させるために必要な起動ファイルです
以下のような感じで記載してください

require 'bundler'
Bundler.require

require './app'
run Sinatra::Application

requireしている./appの部分は作成した Sinatra アプリのファイル名を指定してください
これを作成したらrackupコマンドでアプリを起動できるようになります

rackup config.ru で起動できるはずです
またサンプルはbundlerでも動作するようになっています
bundler で動作させる場合はbundle exec rackup config.ruで起動できます

heroku へのデプロイ

herokuへのサービス登録は済ませておいてください
heroku-toolbeltのインストールがまだの場合は https://toolbelt.heroku.com/ を参考にインストールしてください
heroku-toolbeltがインストールできたらデプロイしていきます

デプロイは簡単です
作成した Rack アプリのディレクトリに移動して heroku にログインして push すればOKです

heroku login
heroku create
git push -u heroku master

とするだけでOKです
ログインは済んでいる場合は実行不要です

すでに登録済みのアプリに対してデプロイしたい場合はheroku createの代わりにgit remote add heroku https://git.heroku.com/APPNAME.gitとして heroku 上の git リポジトリを remote として追加します
APPNAMEの部分は既存のアプリ名を指定してください
heroku listで既存アプリ一覧を確認することができます

これで push に成功すれば rack アプリがデプロイされます

動作確認

push するとURLがターミナルに表示されると思うのでそこにアクセスしましょう
Mac等の環境でブラウザが使えるのであればheroku openでもOKです

サンプルを使っているのならばリクエスト情報をJsonでダンプしてくれるはずです

最後に

ポイントは config.ru で動作させるようにすることでした
Sinatra アプリとして動作する状況で push してもうまく動作しませんでした
heroku はどういうアプリなのかを自動で判断してアプリを起動します
Sinatra アプリの場合はそのままだと動作せず Rack アプリにすると動作するという話でした

0 件のコメント:

コメントを投稿