Rails 배포
1.배포 구조의 결정
2. 배포 방법의 자동화
1. 배포 구조의 결정
배포 구조 결정의 기준
- 성능
- 확장성
- 용이성
- 타 웹프레임워크 지원
- 정적 파일 처리
- SSL
- ...
완전 기본 - Webrick
- 순수 루비 웹서버
- + 설치, 설정 불필요
- - 성능
빠르지만 고통스러운 - Apache + Fast CGI
- public/.htaccess , public/dispatch.fcgi
- - 500 Internal Server Error
- + 성능
한 때 날렸던 - Lighttpd + Fast CGI
- + 안정적 Fast CGI 지원
- + 쉬운 설정
- - 개발이 다소 정체 상태
지금은? 완전 개 판!

- Mongrel
- 루비로 구현된 웹서버(파싱은 C로 구현)
- + 설정 불필요
- + 성능
- + 어느 정도의 정적 파일 처리 능력
- + 활발한 개발과 다양하고 상세한 문서 제공
- 보통 똥개가 아니다!
품종 개량 (Evented Mongrel)
- 루비 스레딩의 취약성
- Threaded -> Evented
- gem install eventmachine
- gem install swiftiply
- env EVENT=1 mongrel_rails start -e production -d
개 떼가 필요해! (Mongrel Cluster)
먹이 분배 문제? (Load Balancer)

TCP Balancer : Pen / Balance
- pen -H 4000 localhost:3000 localhost:3001
HTTP Balancer : Pound
Web Servers
- + 정적 파일 별도 처리
- + 다른 웹플랫폼 지원
- - 복잡 (Apache는 엄청 복잡)
-
웹서버들
- Apche+mod_proxy_balancer
- Lightspeed
- Lighttpd
- Nginx

- Made in Russia
- + 성능, 성능, 성능!!
- + 활발한 개발
- + 비교적 쉬운 설정
배포 스택 결정 초간단 기준표
| 레일스 오늘 처음이에요 |
Webrick |
| 이제 조금 알 것 같네요. |
Mongrel ( evented Mongrel) |
| 좀 더 빠른거요. 쉬우면서. |
Pen/Balance + Mongrel_cluster |
| 좀 더 빠르거요. SSL 되면서요 |
Pound + Mongrel_cluster |
| 아파치 아니면 안되요. 좀 복잡해도 참을께요 |
Apache + mod_proxy_balance + Mongrel_cluster |
| 무지 빠르고. 간지나는 |
NginX + Mongrel_cluster |
참고 문헌
2. 배포 절차

Capistrano


Capistrano 개념

cap : capfile = make : makefile
필요사항
- gem install capistrano
task 정의
- # Capfile
- task :count_libs do
- run "ls -x1 /usr/lib | wc -l"
- end
- cap count_libs
- cap invoke COMMAND="ls -l"
- cap invoke COMMAND="ls -l" HOSTS="some.host.org"
role 정의
task가 수행 될 대상 원격 서버들을 역할 별로 구분하여 정의
- role :web, "web1.doggy.com", "web2.doggy.com"
- role :db, "db.doggy.com"
- taks :check_free, :roles => [:web, :db] do
- run "df -h /"
- end
Capistrano with Rails
| 개발서버 |
원격서버(운용서버) |
|
install mongrel, mongrel_cluster
install capsitrano
mongrel_rails cluster::configure
capify .
edit depoy.rb
svn add and commit
cap deploy:setup
cap deploy:cold (최초 deploy)
cap deploy (두번째 이후 deploy)
|
install database
create a db for Rails app.
install mongrel, mongrel_cluster,
install capistrano
useradd -d /home/APP -m APP
APP ALL=(ALL) ALL (in /etc/sudoers )
|
capify
- Rails 어플리케이션 폴더에 Capitstrano 사용을 기본 설정 파일 생성
- capfify .
- load 'deploy'
- [prj_root]/config/deploy.rb 생성
deploy.rb
- # 원격 서버 login id = 'APP'
set :runner, "APP"
- set :user, "APP"
- # application name
- set :application, "dry"
- # svn repository
set :repository, "svn://src.doggy.com/trunk"
- # 최신 deploy소스 위치 : /home/APP/dry/current
set :deploy_to, "/home/APP/#{application}"
role :app, "www.doggy.com"
role :web, "www.doggy.com"
role :db, "www.doggy.com", :primary => true
script/spin
- mongrel_rails cluster:start
참고문헌
- Rails, Capistrano, Mongrels and nginx on Gentoo / valibuk.net
- Capistrano Basics
- Using Capistrano with Rails
- Deploying Rails Applications / Pragmatic Programmers


