HerokuのHTTPサーバをUnicornに変更する

WEB+DB PRESS vol.70の”実践Rails高速化”特集などでも取り上げられている

Unicornとは

Rackアプリ向けのモダンでイケてるHTTPサーバです。
Unicornってまず名前がいいですよね、デストロイモードになりそう、なったら困るけど。
何が素晴らしいのかとかはお母さんにでも聞いて下さい。

Herokuの公式サイトに掲載された手順に従って設定してみます。

1. Gemをインストールする

まずはいつものとおりgemインストールからです。
Gemfileにunicornを追加してbundleインストールしましょう。

1
gem 'unicorn'

run $ bundle install

2. コンフィグを作成する

次にUnicorn用のコンフィグを作成します。

1
$ touch config/unicorn.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#config/unicorn.rb
worker_processes 3
timeout 30
preload_app true

before_fork do |server, worker|

  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|

  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to sent QUIT'
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end

3. Procfileを変更する

プロセスをUnicornで立ち上げるため、Procfileを変更します。

1
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb

※ローカルで試す場合は次のコマンドからどうぞ $ foreman start.

Herokuへデプロイする

Herokuへデプロイ後、プロセスコマンドで確認しましょう。
ちゃんとUnicornでwebプロセスが起動しているようですね。ヒヒーン

1
2
3
$ heroku ps
=== web: `bundle exec unicorn -p $PORT -c ./config/unicorn.rb`
web.1: up 2013/03/13 04:00:30 (~ 1h ago)

まとめ

  • gemをインストールする
  • configを作成する
  • Procfileを変更する

3ステップで変更できました。とても簡単ですね。
Railsのエコシステムは素晴らしくて、本当ありがたいです。

URLs