최근 rails의 가장 큰 이슈중의 하나는 passenger이다. passenger는 rails applicaiton을 apache module을 통해서 구동함으로써, rails의 약점 중 하나로 지적되어 왔던 "배포 및 관리가 어렵다." 는 문제를 말끔히 해결해 준다. passenger를 이용한 배포는 정말로 간편하다. PHP를 이용해서 배포를 하는 것 처럼 수정된 소스를 복사하고, apache를 재시작 해주면 된다. mongrel같은 rails을 위한 전용 서버가 전혀 필요없다.
passenger를 설치하고 그것을 이용해서 배포를 해 보자.
Linux Debian 2.6.18
Apache/2.2.3
우선 passenger gem을 설치한다.
passenger의 apache module을 만든다.
위 명령은 module을 만들면서 해야할 일들을 매우 친절하게 설명해 주었기 때문에 그냥 따라하기만 해도 설치 및 설정이 끝난다.
Passenger user guide 나 superkdk님의 문서를 참조하면 더 많은 정보를 얻을 수 있다.
다음은 debian에서 apache설정을 하는 한 예일 뿐이다.
apache의 module 활성화
/etc/apache2/mods-available/rails.load 다음과 같이 만든다.
그리고 /etc/apache2/mods-enabled/rails.load에 symbolic link를 만든다.
virtual host 설정
betterlife라는 rails applicaiton이 /home/betterlife에 있고, domain이름이 www.betterlife.com이라고 가정하면
/etc/apache2/sites-available/betterlife을 다음과 같이 만든다.
단지 virtual host의 DocumentRoot를 RAILS_ROOT로 설정하기만 하면 rails를 알아서 구동시킨다. 훌륭하다!
그리고 /etc/apache2/sites-enabled/002-betterlife에 symbolic link를 만든다.
apache를 재시작한다.
apache의 재시작 없이 rails를 재시잘 할 수 있는 방법이 있는데, 그것은 RAILS_ROOT/tmp/restart.txt 파일을 생성하는 것이다.
이것이 전부다.
이전의 배포 방법은 mongrel, mongrel_cluster, apache, proxy_blancer, seesaw를 이용하는 것이었다. 그리고 mongrel들이 잘 동작하고 있는지 확인하기 위해 god로 감시도 필요했다. passenger를 사용하면 apache와 passenger만 있으면 된다. apache의 설정도 훨씬 간단하다. 또 좋은 점은 서비스 중단없이 mongrel을배포하려고고 고민할 필요도 없고, mongrel이 제대로 동작하고 있는지 걱정할 필요도 없다.
capistrano를 이용해서 재시작 task를 재정의 하면 배포 역시 문제없다.
start와 stop 은 아무것도 하지 않도록 재정의하자.
restart는 /tmp/restart.txt를 만드는 것으로 재정의하자.
배포가 7배는 편해진 것 같다. 이제 이전의 mongrel과 mongrel_cluster를 이용한 복잡한 설정및 배포는 잊어도 되겠다. 게다가 성능도 mongrel보다 좋다고 하고, memory도 적게 사용한다고 하니, 이보다 더 좋을 수는 없다.
앞으로 큰 문제가 없기를...
passenger v1.0.1 은 사용자의 접속수가 많아지면 mysql connection이 간간히 끊어지는 문제가 있음.
http://groups.google.com/group/phusion-passenger/browse_thread/thread/bd3e3af020830b1a
=> 더 높은 버젼으로 업그레이드 필요.