2011-01-27 2 views
40

내 이니셜 라이저 (config/initializers/) 중 하나의 코드가 환경에서만 실행되지만 :test 또는 :production이 아닌 코드가 필요합니다. 그렇게하는 가장 좋은 방법은 무엇입니까?레일 : 환경 별 이니셜 라이저?

config/environments/test.rb에 붙여 넣기가 불투명 해 보이며 전체 이니셜 라이저 파일을 if Rails.env == 'development' do ... end 문으로 마무리하는 것이 좋지 않습니다. 이것을하기위한 몇 가지 표준 방법이 있습니까?

(배경 : 그래서 지금은 테스트 (생산) 모드에서 그에 질식, 내 Gemfile:development 그룹에 바리 스타 보석을 이동하기 위해 노력하고있어, 테스트로드 시간의 속도를 높이기 위해,하지만 Barista.configureconfig/initializers/barista_config.rb 호출합니다.)

답변

40

난 당신의 config/environments/development.rb에 구성 코드를 두거나 귀하의 if 블록으로 이니셜 라이저 코드를 래핑하는 두 가지 옵션이있을 것이라고 확신합니다. 그래도 if Rails.env.development?으로 두 번째 옵션을 강화할 수 있습니다.

Barista.configure do |c| 
    c.env = :development 
end 

이는 dev에 모드에서 JS로 커피 스크립트 컴파일하고 테스트를 가속화해야

+7

또 다른 유사한 패턴은 Foo gem이 개발 또는 테스트 모드에서만로드되는 경우'if defined? (Foo)'를 사용하는 것입니다. [Konacha] (https://github.com/jfirebaugh/konacha)는이를 권장합니다. –

+0

나는 Konacha 접근법을 좋아한다 - Gemfile에 이미 명시된 것을 반복하지 않아야한다. – ZoFreX

1

바리 스타는 이것에 대한 구성 설정이 있습니다. 이 좋은 아이디어 인 경우 나도 몰라

https://github.com/Sutto/barista

+0

'Barista.env'는 Barista의 환경을 설정하며, 기본값은'Rails.env'입니다. 이것을': development'로 강제하면'Rails.env'에 상관없이 앱이 개발 모드에있는 것처럼 행동하게됩니다. 이런 식으로 환경을 설정하면 안됩니다. –

3

rake barista:brew 

에 코드를 확인하기 전에,하지만 다른 생각 :.

는 실행해야합니다.

당신은 config/initializers/development 디렉토리를 만들 수 있습니다 (또는 config/environments/development/initializers)는, 그 디렉토리에 barista_config.rb을 넣어, 다음 config/environments/development.rb에서 해당 디렉토리에있는 것을 포함한다.

좋은 생각인지 아닌지는 모르겠지만 적어도 3 번째 옵션입니다 ... 질문을한지 3 년 6 개월이 지난 후에도 여전히이 문제에 대해 생각하고있는 경우에 대비해.

관련 문제