2011-11-07 4 views
1

deploy 사용자를 대상으로하는 일부 ENV 변수가 있습니다. 우리는 몇 가지 준비 호스트를 가지고 있기 때문에유니콘을 다시 시작할 때 .bashrc를 다시 저장 하시겠습니까?

config.action_mailer.default_url_options = { host: ENV['MY_HOST'] } 

이 필요합니다 :

내 레일 응용 프로그램 (. 어떤 Heroku recommends하지만, Heroku가를 사용하지 않고 마찬가지로) application.rb, 예를 들어, 특정 기능에 대해 다음에 따라 달라집니다 . 하나 개의 레일 staging 환경을 사용에

export MY_HOST="staging3.example.com" 

이 우리를 허용하지만,이 할 수 있기 때문에 여전히 각 호스트의 올바른 호스트 이름 등 이메일을 보내, 테스트에 사용한 각 호스트과 같이 .bashrc에 올바른 호스트 이름으로 MY_HOST를 정의하고있다 기계별로 설정 될 수 있습니다.

USR2을 사용하여 유니콘을 다시 시작하면 불행히도 이러한 변수에 대한 변경 사항이 적용되지 않습니다. 중지 및 시작을하면 변경 사항이 올바르게로드됩니다.

저는 preload_app = true을 사용하고 있습니다. 제가 생각하기에 이것과 관련이 있습니다. 어떤 아이디어?

답변

1

결국 나는 app_config.yml 파일에서 내 app config를 로딩하는 것에 찬성하여이 접근법에서 벗어났습니다. Ryan Bates는이 접근법을 Railscast #226에 포함합니다.

제가 다르게 한 유일한 이유는 내가 사용하는 각 서버에 대해 공유 app_config.yml을로드한다는 것입니다. 카피스트라 노를 사용하고 있기 때문에 배포시 파일을 심볼릭 링크합니다. 예를 들어

는 staging2 내 shared/configs/app_config.yml은 다음과 같습니다

staging: 
    host: "staging2.example.com" 

을 ... staging3에이 보이는 반면 내 application.rb이 줄을 대신 가지고 지금

staging: 
    host: "staging3.example.com" 

:

config.action_mailer.default_url_options = { host: APP_CONFIG[:host] } 

config/app_config.yml을 삭제했습니다. git에서 배포에 포함되지 않도록합니다. (나는 config/app_config.yml.template로 이동했다.) 그런 다음 배포에 내가 shared/configs/app_config.ymlconfig/app_config.yml에 심볼릭 링크하는 카피 스트라 노 작업을 사용 : ENV를 사용하여 이상

namespace :deploy do 
    desc "Symlinks the app_config.yml" 
    task :symlink_app_config, :roles => [:web, :app, :db] do 
    run "ln -nfs #{deploy_to}/shared/config/app_config.yml #{release_path}/config/app_config.yml" 
    end 
end 

이 전략은 다음과 같은 이점을 가지고하는 것은 바르 :

  • 을 통해 모든 노드에 배포 카피스트라 노
  • 해당 서버에서 파일을 변경하기 만하면 조건부 호스트를 수행 할 수 있습니다.
  • 모든 것이 레일 내부에서 완료되었으므로 유니콘은 USR2로 변경됩니다.
  • 모든 것이 한 곳에서 유지되며 코드베이스 외부의 다른 변수의 영향을받지 않습니다.