2014-10-21 5 views
1

다른 회사의 여러 서버에 각각 설치할 Rails 3.2.x 응용 프로그램이 있습니다. 따라서 회사에 따라 로고 경로, twilio API 키, 일부 텍스트 메시지 등이 변경 될 수 있습니다. 각 서버 인스턴스는 동일한 github 코드베이스 저장소를 사용하지만 이러한 항목이 서버마다 다르도록 구성해야합니다.여러 응용 프로그램 및 구성 인스턴스

ENV 변수를 사용하여 이런 식으로 설정하는 방법을 읽었지만 약간 혼란 스럽습니다. 나는 기본적으로 하나의 github repo를 갖고 싶어하지만 회사/서버마다 다른 구성을 가지고있다.

나는이 ENV 변수가 포함 된 config/application.yml 파일을 만들 수 있지만 레일스에서 ​​해당 파일을로드하는 방법을 잘 모르고 있다고 생각했습니다. config/application.yml을 .gitignore에 추가하고 수동으로 별도의 config/application.yml 파일을 app/shared/config 아래에있는 각 서버에 만들고 내 Capistrano deploy.rb에 심볼릭 링크를 만듭니다.

누군가가 application.yml 파일에서 ENV 변수를 설정하고보기, 컨트롤러, 모델 등에서 불러올 수 있도록 내 Rails 앱을로드하는 올바른 방향으로 나를 안내 할 수 있습니까?

+0

예, deploy.rb에있는 설정 파일을 서버 로컬 서버에 링크하면되지만 그렇게하기는 쉽지 않습니다. – ryenus

답변

1

이 작업을 수행하는 방법을 알아 냈다고 생각합니다. 여전히 테스트해야합니다.

먼저 내가 YAML 부하에 따라 속성을 company.yml 파일이 변경되지 않은 경우 회사 설정, 설정 기본값에 대한 초기화를 만들고 병합

설정/초기화/company.rb

default_company = { 
    name: "changeme", 
    phone: "000-000-0000", 
    email: "[email protected]", 
    logo_path: "public/logo_changeme.png", 
    email: "[email protected]", 
    no_reply_email: "[email protected]" 
} 

Company = YAML.load_file(Rails.root.join('config', 'company.yml')).merge(default_company) 
설정/company.yml

--- 
:name: acme 
:phone: '281-444-8800' 
:logo_path: 'public/acme.png' 
:email: '[email protected]' 
:no_reply_email: '[email protected]' 
:

그런 다음 특정 회사의 설정으로 YAML 파일을 생성

그런 다음 company.yml.gitignore에 있는지 확인하여 리포에 푸시되지 않았습니다.

task :after_update_code do 
    run "ln -nfs #{deploy_to}/shared/config/database.yml #{release_path}/config/database.yml" 
    run "ln -nfs #{deploy_to}/shared/config/company.yml #{release_path}/config/company.yml" 
end 

내가이 일을 생각

deploy.rb 발췌 :이 릴리스 배포 사이에 지속 있도록 그 후 나는 app/shared/config directory. Then somehow in my Capistrano deploy, symlink after deploy similar to how I symlink my database.yml` 파일에 적절한 서버에 특정 company.ymlscp 것 하지만 스테이징 서버, 특히 카피스트라의 symlink 부분에서 테스트해야합니다.

+0

나는 이것을 테스트했지만 병합은 거꾸로 나타난다. 'default_company'를 가져 와서'company.yml' 파일을 덮어 쓰거나 병합합니다. 내가 반대로 할 때'Company = default_company.merge (YAML.load_file (Rails.root.join ('config', 'company.yml')))'예기치 않은 레일 오류가 발생한다. – nulltek

관련 문제