Rack, Sinatra, Thin, Nginx, (Rails)で起動してみる

目標的には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番へアクセスすれば表示されます。

された!

広告

Rack, Sinatra, Thin, Nginx, (Rails)で起動してみる」への2件のフィードバック

  1. ピンバック: 100 top posts 100 top blogs Türkçe. 1/1/2009 « Kopanakinews’s Weblog
  2. ピンバック: links for 2011-03-01 « Bloggitation

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中