033 레일스 애플리케이션을 초기화하는 여러가지 방법
032 XP 고수들이 쓰는 레일스 탐험기/ 절대 주관적인 루비 뉴스
레일스 2.0에서 개선된 점 중 하나가 바로 초기화 과정을 모듈화한 것이다. 그 대표적인 예가 config/initializers 폴더다. 초기화 과정에서 이 폴더의 파일을 읽어서 하나씩 수행해준다. 예전에는 environment.rb 파일에 모두 써주던 것을 기능 별로 나눠서 initializers에 넣어주니 훨씬 관리하기가 편하다. 그리고 레일스 버전이 올라가도 약간 더 쉽게 업데이트 할 수 있다(버전업 하면 environment.rb를 업데이트해야할 경우가 있으므로).
스프링노트에서는 initializers에 아래 같은 파일을 두고 각각에 맞는 초기화 작업을 수행하고 있다(비밀이려나?).
레일스 초기화 과정의 순서를 대략 살펴보면 다음과 같다.
- 프레임워크 로딩
- 환경(environment.rb) 로딩
- 플러그인 로딩
- 옵저버 로딩
- Initializers 로딩
보다 시피 initializers는 레일스 초기화 과정의 맨 마지막에 위치한다. 하지만 환경 파일이나 플러그인에서도 초기화가 모두 끝난 다음에(즉 5번 위치에서) 실행해줘야할 코드가 있게 마련이다. 그 때는 after_initialize 블럭을 사용한다. 환경별로 다른 일을 수행해야할 경우 특히 유용하다.
- config.after_initialize do
- ExceptionNotifier.exception_recipients = %w(admin.mail.com)
ExceptionNotifier.email_prefix = "[EXCEPTIONS] " - end
위 코드를 production.rb에만 넣어주면 프로덕션 환경에서면 ExceptionNotifier 설정을 한다.
만일 매 요청마다 해야할 초기화가 있다면 이 코드는 Dispatcher#to_prepare 메서드를 이용해서 등록한다.
- config.to_prepare do
- USER_LIST = YAML.load_file(RAILS_ROOT + '/config/user_list.yml')
- end
대부분 컨트롤러의 before_filter로 처리가 가능한 내용이여서 to_prepare의 용도는 그리 많지는 않다(필자도 이 글을 위해 조사를 하면서 처음 알았다).
마지막으로 한가지 더, 최근 개발 버전에 추가된 내용으로 preinitializer가 있다. 이 내용을 소개하기 위한 서론이 이만큼 길었다. :)
- Changeset 8159 Load config/preinitializer.rb, if present, before loading the environment
- What's New in Edge Rails: Pre-Environment Load Hook
위 초기화 단계의 1 이전에, 즉 레일스 로딩보다 앞에 수행하는 초기화이다. 레일스 버전을 바꾼다더나 특별히 어떤 라이브러리를 사용한다던가 할 때 유용할 것 같다. 방법은 config/preinitializer.rb 파일을 생성하고 이 곳에 필요한 내용을 담기만 하면 된다.
끝으로, 레일스 사용자가 많아지면 많아질 수록 점점 더 무거운(다른 말로는 나한테는 덜 필요한) 기능이 붙어가는 것 같기도 하다. 대안 프레임워크로 자꾸 눈이 가는 이유이기도 하다.
- 2007/11/20 14:25:00
History
Last edited on 11/20/2007 23:39 by deepblue
Comments (0)