�ɤ����Unicorn�Ȥ����Τ��ɤ��餷���Ȥ�������ʹ���Ĥ����Τǡ��ɤ�ʤ�󤸤���Ȼ�Ƥߤ뤳�Ȥˤ�����

Route 477 - �絬��Rails�����ȤΤ���ο�����HTTP�����С�Unicorn

Unicorn�ƤΤϲ��ԤʤΤ��ȸ����ȡ�Rack�ڤ�Rails���б�����Ruby��Web���ץ��Ѥ�HTTP�����С��ܤ����Ͼ�ε������ɤ�Dz�������github�Ǥ�ȤäƤ뤽���������ȡ�̾�����ʹ��ɤ��ʤ���ޤ�ط��ʤ��ˡ�

�ޤ���unicorn������

�ȸ��äƤ⡢gem install unicorn����config.ru������ǥ��쥯�ȥ��unicorn���ޥ�ɤ�á���С�thin�Ȥ���Ʊ���褦�˥����Ф���ư���롣rackup�ߴ��Υ��ץ������դ��Ƥ�Τ��ä�Ǻ�ळ�Ȥ�ʤ��Ȼפ������Ȥ����̤�Apache�Ȥ��ǥץ����������ꤷ�Ƥ��ʤ�ʤ�ʤꤹ��Ф����Ȥ��롣

������������礷�����򤯤ʤ��Τǡ��޳Ѥ������ε����˽񤤤Ƥ���褦�ˡ�nginx�ǥ����åȤǤäƤ�������򤷤Ƥߤ롣���Unicorn���������ꡣ���ʤߤ˥���ץ�˻Ȥä��Τ���ˤ�ä������404�Τ�ġ������ߤ�Apache2+Passenger��ư���Ƥ�����

# unicron.conf
worker_processes  4
working_directory '/var/www/rackapp'
listen '/tmp/rackapp.sock', :backlog => 1
listen 4423, :tcp_nopush => true
timeout 10
pid '/tmp/rackapp.pid'
preload_app  true
stderr_path '/var/log/rackapp.log'

before_fork do |server, worker|
  old_pid = "#{server.config[:pid]}.oldbin"
  if old_pid != server.pid
    begin
      sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
      Process.kill(sig, File.read(old_pid).to_i)
    rescue Errno::ENOENT, Errno::ESRCH
    end
  end

  sleep 1
end

after_fork do |server, worker|
  addr = "127.0.0.1:#{4423 + worker.nr}"
  server.listen(addr, :tries => -1, :delay => 5, :tcp_nopush => 1)
end

��ȤϤۤȤ��Unicorn�����������饳�ԥڡ����ʤߤˡ�nginx��侩���Ƥ�������ä�nginx������˻�����DSL�ˤʤäƤ뤱�ɡ����֤ϸ��Ƥ��̤�Ruby�����ε��ˤʤ��ưŪ������򤴤ˤ礴�ˤ�ߤ����ʤ��Ȥ�Ǥ��롣������Thin�ߤ����ˤ褷�ʤˤ�äƤϤ���ʤ����ɡ������դ������Logger���Ϥ��ʤ�Rack�Υߥɥ륦������ȤäƤʤ�Ȥ�����ʤꤹ���OK��

��Ǥ����Ŭ���ʥե�����̾����¸�����顢���Τ褦��unicorn���ޥ�ɤ�á����

$ unicorn -D -c /var/www/rackapp/unicorn.conf /var/www/rackapp/config.ru

-D���ץ����ǥǡ����ư��-c���ץ���������ե�����λ��ꡢ�Ǹ�ΰ�����rackup�ե�����Υե�ѥ������ʤߤˤ����/var/www/rackapp����ʤ��Ȥ����Ǽ¹Ԥ��Ƥߤ�������ɡ��ǽ�ϡ�working_directory�Ȥ����ꤷ�Ƥ뤫�顢�����ˤ���config.ru�򾡼���ɤ�Ǥ��줿�ꤷ�ʤ����ʡפȤ��פäƤ�������ɤ�äѤ����ǡ����θ����Хѥ��ǻ��ꤷ�Ƥߤ���require�ǥ����ơ֤���ʥե�����͡��衢�����Ͽ��Ƹ����פ��ܤ�Ф����Τǡ����Хѥ��ˤ�����Ԥ�����

���λ�����http://localhost:4423/�������ȸ����뤳�Ȥȡ�unicorn.sock������Ƥ뤳�Ȥ��ǧ���褷����nginx��

nginx�Υץ���������

����ʴ�����

�� nginx.unicorn.conf
upstream rackapp {
    server unix:/tmp/rackapp.sock;
}

server {
    listen       80;
    server_name  localhost;

    location / {
        proxy_pass  http://rackapp;
    }
}

��������ܤ�nginx.conf��http�Υ֥��å��Τɤ�����include���Ƥ�롣������äȤ��Ȥ���ʳ��ˤ����̤�nginx�κ٤�������Ϥ��Ƥ뤱�ɡ������ǤϾ�ά���Ƥޤ���

���ʤߤˡ������åȤǤ��褦�����ꤷ�Ƥ뤫�餳���ʤäƤ뤱�ɡ�TCP���ɤ����proxy_pass�ΤȤ�����http://localhost:4423�Ȥ��ˤ��Ƥ�äƤ����̤�ư����

�Ȥꤢ��������Ǵ��������Ȥ�nginx��ư���Ƥ��С������ȸ����롣��Ũ��

���󥿡��ե����������줵��Ƥ�ä���Ũ���

���䤡����ä�Rack�ǥ��󥿡��ե����������줵��Ƥ�äơ��ɤ��Ǥ���͡����ץ�¦����ޤ�Ϯ��ʤ��Ƥ⤵���äȰܹԤǤ���櫓�Ǥ������äƤ����ä򤳤ʤ����񤤤��ˡ����ȡ��Ĥ��Ǥ�Ʊ�������Ф�ư���Ƥ�HTTP::Engine�Υ��ץ�⡢apache+modperl����nginx+fcgi�˰ܹԤ��Ƥߤ����ɡ����ä�����礳�ä������Ѥ������餤�ǥ��ץ�¦������Ϯ�äƤʤ����ɤ��ʡ����������ƿ������Ķ����ФƤ����ꤷ���Ȥ��ˤϤ�äѤ�Rack��ʤ��餬������ȯ�����롣�޳ѤʤΤǼ���Plack��H::E�ΤȤ���Ʊ�����Ȥ��äƤߤ褦�ȸ�Ƥ�档

��ǡ����Unicorn���ɤ��Ρ������Ρ�

�����ĥ٥����äƤʤ��ΤǤʤ�Ȥ⡣��äƤ�������404�פ��㤢��ޤ껲�ͤˤʤ�ʤ������ʡ������������ץ������ɤ�����äƤ���fork����Ȥ�nginx¦�˵��դ����ʤ��Ѥ˺Ƶ�ư�Ǥ���Ȥ������դ����Ǥ⽽ʬ̥��Ū�ǤϤ��롣���ȡ��Ƶ�ư���ᤫ�ä���ή�С�