ruby on rails에서 배포 서버에 따른 설정 파일 관리 전략은?

2013-05-10 14:50

소프트웨어 공학 수업에서 ruby on rails(이하 RoR) 기반으로 프로젝트를 진행하고 있다. RoR에 대한 이해가 높지 않다보니 하나씩 찾아가면서 해결하고 있는데 역시 RoR은 프레임워크 자체적으로 대부분의 기능을 제공하고 있어 편하게 웹 애플리케이션을 개발하고 있다. 자바 기반으로 웹 애플리케이션을 개발할 때와는 완전히 다른 맛이 있다.

그런데 RoR 사용하다보니 한가지 궁금한 점이 생겼다. RoR은 기본적으로 environment를 development, test, production을 제공하고 있다. development는 개발 단계, test는 말 그대로 테스트할 때, production은 실 서비스할 때의 단계로 보면 된다. 그런데 개발 서버, staging 서버에 따라 다른 설정이 필요한 경우가 있다. 현재 진행하는 프로젝트만 보더라도 개발 서버에서 다른 설정을 해야 되는 상황이 발생했다. 이와 같이 기본으로 제공하는 environment 외에 다른 목적의 environment가 발생하면 custom으로 추가해서 사용하는가? 또한 가능한가? 아니면 기존의 environment 내에서 용도에 맞춰 사용하는 방식으로 취하는가?

RoR의 environment 활용 전략과 관련하여 좋은 참고 문서라도 있으면 공유해 주면 좋겠다.

0개의 의견 from FB

3개의 의견 from SLiPP

2013-05-10 15:12

상황을 좀 자세하게 설명해 주시는게 좋을꺼 같아요. 지금 쓰신걸로는 구체적으로 어떤 상황인지 이해하기 어렵네요.

어떤 설정을 다르게 쓰시고 싶으신 거죠? 만약 database 설정 관련이라면, 기본적으로 rails project는 VCS에 database.yml 을 저장하지 않습니다. database.yml.sample 을 두고, capistrano 배포 시점에 shared/config/database.yml 을 current/config/database.yml 로 symlink 거는 형태로 사용하고요.

추가적인 설정이 development / test / production에 필요하다면 (예를 들어 facebook api key 등이요.) http://stackoverflow.com/questions/10593036/rails-yaml-config-best-practice 여기 채택된 답변과 유사한 방법을 선호하는 편입니다. 필요한 설정들을 yml 파일에 넣은 상태로, environment.rb 에서 로드하거나, 환경 별 initializer를 사용하는 경우도 있고요.

상황에 따라 다르게 적용되기에, 좀 더 자세한 설명을 해 주셔야 할 듯 합니다~

2013-05-10 16:19

레일즈가 이미 정의한 환경 외에 새로운 환경을 추가하는 것을 제한하지 않는 것으로 알고 있습니다. config/environments/staging.rb 을 만들고 RAILS_ENV를 "staging"으로 지정하면 될거예요. 외부 설정 파일을 이용하는 방법은 http://stackoverflow.com/questions/11648620/setting-environment-variables-in-rails-3-devise-omniauth 요거 한 번 보세요.

그리고 환경 추가나 변경을 원활하게 하기 위해서는 Rails.env == 'production', Rails.env.production? 이런 환경에 따라 다른 동작을 하는 코드를 만들지 않는 것이 좋겠죠. 각 환경에서 다르게 정의한 값을 바로 쓰는 방법이 좋습니다.

의견 추가하기

연관태그

← 목록으로