この記事は公開されてから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 を使えるようになりました!ヽ(=´▽`=)ノ
まとめ
そんな感じでちょっとした備忘録でした。データベース容量は限られますが、ここまで無料で使えるのは便利ですよね。ぜひ構築してみてください!