[Ruby] Sinatra + PostgreSQL + Unicorn な Web サーバーを Heroku に構築する

2013.12.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。ひさびさにサーバーサイドの記事の投稿になります。何気なく Heroku で軽快な Web サーバーを構築してみたくなったので、そのメモを残してみたいと思います。

開発環境

  • Mac OS X 10.9
  • rbenv 0.4.0
  • Ruby 2.0.0p353

それでは、構築します

初期設定

# フォルダ作成&移動
mkdir sample-app && cd sample-app

# Gitリポジトリにする
git init
# .gitignore の生成
gi ruby,rails

# Gemfile の生成
bundle init

.gitignore ファイルは gi コマンドは gitignore.io というサービスを使って生成してみました。

各種 Gem のインストール

次に Gemfile を編集します。

vim Gemfile

Gemfile

source "https://rubygems.org"
ruby '2.0.0'

# Sinatra
gem 'sinatra'

# Unicorn
gem 'unicorn'

Gemfile が出来上がったら、以下のコマンドで gem をインストールします。

bundle install --path vendor/bundle --without production

アプリの作成

次にアプリケーションの本体とも言える main.rb を実装します。

vim main.rb

main.rb

require 'sinatra'
require 'sinatra/base'

class MainApp < Sinatra::Base
  get '/' do
    'Hello, World!'
  end
end
[/ruby]

<p>
<tt>MainApp</tt> というクラスにとりあえず GET だけ適当に書いてます。
</p>

<p>
次に <tt>config.ru</tt> と <tt>unicorn.rb</tt> と <tt>Procfile</tt> というものを作ります。これらは Heroku の実行環境で必要になります。
</p>



<p>
<strong>config.ru</strong>
</p>



<p>
ここまでできたらデータベースの環境設定ファイル <tt>config/database.yml</tt> を作ります。
</p>



<p>
<strong>config/database.yml</strong>
</p>



<p>
この中で <tt>ActiveRecord::Base.establish_connection</tt> で環境に合わせて <tt>database.yml</tt> から設定を読み込んで接続していますが、ローカルで <tt>ENV['RACK_ENV']</tt> が <tt>development</tt> を見るように、<tt>.env</tt> ファイルを作成しておきます (<tt>.gitignore</tt> にも追加しておきましょう)。
</p>



<p>
これでデータベースに接続できるようになったので、マイグレートします。
</p>



<p>
user テーブルが出来上がりました!これでローカルで動くようになりました。次に Heroku で使えるようにしていきます。まずはデータベースを Heroku 上に作成します。
</p>



<p>
<tt>HEROKU_POSTGRESQL_GRAY_URL</tt> みたいな色の名前が付いた設定値が作られます。<tt>postgress://</tt> 以下に各設定値が書いてあるので、すべて <tt>database.yml</tt> に書き写します。
</p>




development:
  adapter: sqlite3
  database: db/test.sqlite3

production:
  encoding: unicode
  adapter: postgresql
  username: user_name
  port: port
  host: host
  database: database
  password: password

ここまでできたら Heroku に Push します。

git add .
git commit -m 'added database'
git push heroku master

多分エラーになると思いますが、マイグレートしていないからですね。ということでマイグレートして再起動。

heroku rake db:migrate 
heroku restart

これで Heroku の PostgreSQL を使えるようになりました!ヽ(=´▽`=)ノ

まとめ

そんな感じでちょっとした備忘録でした。データベース容量は限られますが、ここまで無料で使えるのは便利ですよね。ぜひ構築してみてください!