目標的にはRailsの下にsinatraをミドルウェアとしてrackupするつもり。
現時点では単体で動かせれば良いのでその辺りまでかな。
rack,sinatra,thinはさくっとgem installしておきます。たぶんどれか入れればrackが入るはず。ログとってなかった。
nginxはソースファイルからインストールします。stableです。
# wget http://sysoev.ru/nginx/nginx-0.6.35.tar.gz
# tar zxvf nginx-0.6.35.tar.gz
# cd nginx-0.6.35
# ./configure --prefix=/usr/local/nginx --with-http_ssl_module
# make
# make install
# cd /usr/local/nginx/conf
# vi nginx.conf
pid /var/run/nginx/nginx.pid;
worker_processes 3;
events {
worker_connections 1024;
}
http {
include mime.types;
include proxy_conf;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 0;
upstream radiant {
server unix:/var/tmp/thin.0.sock;
server unix:/var/tmp/thin.1.sock;
server unix:/var/tmp/thin.2.sock;
}
upstream rackup {
server 127.0.0.1:9292;
}
server {
listen 80;
server_name example.net;
access_log /var/log/nginx/radiant.access.log;
root /var/www/radiant/public;
index index.html;
location / {
proxy_pass http://radiant;
}
}
server {
listen 80;
server_name test.com;
access_log /var/log/nginx/rackup.access.log;
location / {
proxy_pass http://rackup;
}
}
}
# vi proxy_conf
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
pidの位置を/var/run以下にしているのはなんとなくまとめておきたいからです。
radiantの設定とか入ってるけど気にしない。
upstreamでソケットとかポートとか書いてあげてproxy_passで指定するだけ。
server{}でapacheのバーチャルホストっぽいことができる。
sslは次回持ち越し。
proxy_confはサンプルコピペなのであんまり精査してない。
とりあえず動かす設定なので内容もあまり吟味してない。
たぶんrootで実行しちゃまずい気がするけどテストだしいいよね。
# /usr/local/nginx/sbin/nginx
これで準備OK。再起動するときは、
# kill -HUP `cat /var/run/nginx/nginx.pid`
こんな感じ。
やっとsinatraへ。ちょっとサイトが更新されててびっくりした。
ばびっと用意。
# cd /var/www
# mkdir app
# cd app
# touch routes.rb config.ru
# mkdir public tmp views log
sinatraコントローラ作成。
目的のrackミドルウェアとするには、Sinatra::Baseを継承したクラスを作り、そのなかに書いておくのがやりかたとしてあるっぽいけど、それは次回ということで。
# vi routes.rb
require 'rubygems'
require 'sinatra'
get '/' do
erb :home
end
not_found do
'This is nowhere to be found'
end
error do
'Sorry there was a nasty error - ' + env['sinatra.error'].name
end
sinatraテンプレート作成
# vi views/home.erb
halt.
rack設定
# vi config.ru
require 'rubygems'
require 'sinatra'
set :run, false
set :environment, :production
require 'routes.rb'
run Sinatra::Application
前回テストしたrackの設定に比べて簡素。
こんどはthinの設定ファイルを作ります。
# thin config -C thin.yml
# vi thin.yml
pid: /var/run/thin/thin.pid
timeout: 30
log: log/thin.log
max_conns: 1024
require: []
max_persistent_conns: 512
environment: production
servers: 1
daemonize: true
chdir: /var/www/html
rackup: /var/www/html/config.ru
port: 9292
address: 127.0.0.1
この変も割と適当。
ここもpidを/var/run/thinとかにしているので、ディレクトリつくってあげないと起動してくれません。
sinatraだけなら、ruby routes.rb -e production とかやるだけですが、thinの設定でrackup: /var/www/html/config.ruとしてます。
これ、rackもsockでやればよかった・・まあいいや。
でthin起動。
# thin start -C thin.yml
nginxは起動しているので、ブラウザからtest.comの80番へアクセスすれば表示されます。
された!