A

A

[Rails] passenger(mod_rails) 사용해서 배포하기

최근 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을 설치한다.

  1. sudo gem install passenger

 

passenger의 apache module을 만든다.

  1. passenger-install-apache2-module

위 명령은 module을 만들면서 해야할 일들을 매우 친절하게 설명해 주었기 때문에 그냥 따라하기만 해도 설치 및 설정이 끝난다.

Passenger user guidesuperkdk님의 문서를 참조하면 더 많은 정보를 얻을 수 있다.

 

apache 설정

다음은 debian에서 apache설정을 하는 한 예일 뿐이다.

apache의 module 활성화

/etc/apache2/mods-available/rails.load 다음과 같이 만든다.

  1. LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-1.0.1/ext/apache2/mod_passenger.so
    RailsSpawnServer /usr/lib/ruby/gems/1.8/gems/passenger-1.0.1/bin/passenger-spawn-server
    RailsRuby /usr/bin/ruby1.8

그리고 /etc/apache2/mods-enabled/rails.load에 symbolic link를 만든다.

  1. ln -s /etc/apache2/mods-available/rails.load /etc/apache2/mods-enabled/rails.load

 

virtual host 설정

betterlife라는 rails applicaiton이 /home/betterlife에 있고, domain이름이 www.betterlife.com이라고 가정하면

/etc/apache2/sites-available/betterlife을 다음과 같이 만든다.

  1. <VirtualHost *:80>
        DocumentRoot /home/betterlife/current/public
        ServerName www.betterlife.com
    </VirtualHost>

단지 virtual host의 DocumentRoot를 RAILS_ROOT로 설정하기만 하면 rails를 알아서 구동시킨다. 훌륭하다!

 

그리고 /etc/apache2/sites-enabled/002-betterlife에 symbolic link를 만든다.

  1. ln -s /etc/apache2/sites-available/betterlife /etc/apache2/sites-enabled/002-betterlife

 

apache를 재시작한다.

  1. sudo apache2ctl graceful

 

apache의 재시작 없이 rails를 재시잘 할 수 있는 방법이 있는데, 그것은 RAILS_ROOT/tmp/restart.txt 파일을 생성하는 것이다.

  1. touch RAILS_ROOT/tmp/restart.txt

 

이것이 전부다. 

이전의 배포 방법은 mongrel, mongrel_cluster, apache, proxy_blancer, seesaw를 이용하는 것이었다. 그리고 mongrel들이 잘 동작하고 있는지 확인하기 위해 god로 감시도 필요했다. passenger를 사용하면 apache와 passenger만 있으면 된다. apache의 설정도 훨씬 간단하다. 또 좋은 점은 서비스 중단없이 mongrel을배포하려고고 고민할 필요도 없고, mongrel이 제대로 동작하고 있는지 걱정할 필요도 없다.

 

capistrano 설정

capistrano를 이용해서 재시작 task를 재정의 하면 배포 역시 문제없다.

  1. namespace :deploy do
      task :restart, :role => :app do
        send(run_method, "touch #{current_path}/tmp/restart.txt")
      end
      task :start, :role => :app do   
      end
      task :stop, :role => :app do   
      end
    end

 

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

=> 더 높은 버젼으로 업그레이드 필요.

 

참조

http://inocrazy.com/docs/8

http://www.modrails.com/

http://www.railsgarden.com/2008/04/12/configurating-passenger-mod_rails-on-slicehost-with-ubuntu-710/

 

 

 

Recent Updates
    All Pages
      Show/Hide the left navigation
      Show/Hide bookmarks

      Header

      1. View current page

        aproxacs님의 노트

      loginBar