今、WebアプリケーションのAPIサーバをRubyのフレームワークのSinatraでつくっていて、これを本格的に動かすときにWebサーバをどうしよう。ということになって、Thinが良いらしいという情報を得たので導入してみた。
現状、動いているApacheサーバがあるので、reverse proxyを通して特定のエントリポイントに対してアクセスがあったもののみをフォワードし、Thinを通してSinatraアプリにつなぐことを目標にします。
インストールは非常に簡単。
% gem install thin
これで準備OK。簡単ですね。
次にアプリケーションを呼び出すためのファイルを作ります。
ここでは、ファイル名をconfig.ruとします。内容的には以下の様な形。
ここでrequireされているapp.rbはSinatraアプリ本体です。
# config.ru require 'rubygems' require 'sinatra' require './app.rb' run Sinatra::Application
単純に呼び出してるだけですね。
続けて、Thin本体の設定ファイルを作ります。
まずは中身。
# thin.yaml timeout: 30 log: log/thin.log environment: production servers: 5 daemonize: true rackup: config.ru port: 4040
おおよそ設定見てもらったままなのですが、上記の設定でThinサーバのデーモンプロセスが5本起動されます。
利用されるポート番号は4040〜4044までとなります。
続けて、ログファイルの保管先とプロセス管理用のファイル保管されるディレクトリを予め作っておきます。
$ mkdir log
$ mkdir tmp
これでThin本体の準備完了。実際に動かしてみます。
$ thin start -C thin.yaml
Starting server on 0.0.0.0:4040 ...
Starting server on 0.0.0.0:4041 ...
Starting server on 0.0.0.0:4042 ...
Starting server on 0.0.0.0:4043 ...
Starting server on 0.0.0.0:4044 ...
起動完了。試しに動作を確認したければ、wget等で起動したいずれかのポートに対してwgetを叩けば挙動を確認できますね。
止める場合は、$ thin stop -C thin.yaml でOKです。(restartも)
tmpディレクトリには、起動中のプロセスのpidファイルが、logディレクトリにはそれぞれのThinサーバへのアクセスログが記録されます。
$ ls -l tmp/pids/
total 40
- rw-r--r-- 1 hideack staff 5 11 3 16:30 thin.4040.pid
- rw-r--r-- 1 hideack staff 5 11 3 16:30 thin.4041.pid
- rw-r--r-- 1 hideack staff 5 11 3 16:30 thin.4042.pid
- rw-r--r-- 1 hideack staff 5 11 3 16:30 thin.4043.pid
- rw-r--r-- 1 hideack staff 5 11 3 16:30 thin.4044.pid
$ ls -l log/
total 40
- rw-r--r-- 1 hideack staff 585 11 3 16:30 thin.4040.log
- rw-r--r-- 1 hideack staff 360 11 3 16:30 thin.4041.log
- rw-r--r-- 1 hideack staff 360 11 3 16:30 thin.4042.log
- rw-r--r-- 1 hideack staff 360 11 3 16:30 thin.4043.log
- rw-r--r-- 1 hideack staff 360 11 3 16:30 thin.4044.log