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

された!

広告

Linux, RPMforgeのメモ

すぐ忘れちゃうのでメモっておく。

http://dag.wieers.com/rpm/packages/rpmforge-release/

※x86_64をインストールしてますが、ふつうのPCならi386かな。

wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
rpm -ivh rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
wget http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
rpm --import RPM-GPG-KEY.dag.txt

vi /etc/yum.repos.d/rpmforge.repo 
enabled = 0

yum --enablerepo=rpmforge list

つぎに優先度の設定。

yum install yum-priorities
vi /etc/yum/pluginconf.d/priorities.conf 
enabled = 1

vi /etc/yum.repos.d/CentOS-Base.repo
[base]
.
.
priority = 1

[updates]
.
.
priority = 1

[addons]
.
.
priority = 1

[extras]
.
.
priority = 1

[centosplus]
.
.
priority = 2

vi /etc/yum.repos.d/rpmforge.repo
enabled = 1
priority = 10

これでyum listとかupdateした場合、rpmforgeの優先順位が一番低くなる。