[Ruby] Sinatra + PostgreSQL + Unicorn な Web サーバーを Heroku に構築する
はじめに
こんにちは。ひさびさにサーバーサイドの記事の投稿になります。何気なく 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 を使えるようになりました!ヽ(=´▽`=)ノ
まとめ
そんな感じでちょっとした備忘録でした。データベース容量は限られますが、ここまで無料で使えるのは便利ですよね。ぜひ構築してみてください!