2011-08-14 1 views
1

ScalatraServlet 외부에서 isDevelopmentMode 값에 액세스하는 방법이 있습니까? 그것은 ScalatraKernel 특성에서 오는 것으로 보이므로 가능한 옵션을 포함 할 것입니까?ScalatraServlet 외부에서 Scalatra 's isDevelopmentMode에 액세스

내가 얻으려고하는 것은 DI 구성이 개발 모드에 있는지 또는 데이터베이스 설정을 구성 할 수 있는지 여부를 알 수 있도록하는 것입니다. DI에 Subcut을 사용하고 있습니다.

답변

3

는 내가 설정/시스템 속성 값에 scalatra 서블릿에서 개발 모드를 설정

object AppEnv { 
    private val cloader = getClass.getClassLoader 

    val PRODUCTION = "production".intern 
    val DEVELOPMENT = "development".intern 
    val STAGING = "staging".intern 
    val TEST = "test".intern 

    lazy val environment = readEnvironmentKey(println _) 

    def isProduction = isEnvironment(PRODUCTION) 
    def isDevelopment = isEnvironment(DEVELOPMENT) 
    def isStaging = isEnvironment(STAGING) 
    def isTest = isEnvironment(TEST) 
    def isEnvironment(env: String) = environment.toLowerCase(Locale.ENGLISH) == env.toLowerCase(Locale.ENGLISH) 

    def readEnvironmentKey(failWith: String ⇒ Unit = _ ⇒ null) = { 
    (ep("BACKCHAT_MODE") orElse sp("backchat.mode")) getOrElse { 
     val inferred = "development" 
     failWith("no environment found, defaulting to: " + inferred) 
     inferred 
    } 
    } 

    private def sp(key: String) = { 
    val s = System.getProperty(key) 
    if (s != null && s.trim.nonEmpty) Some(s) else None 
    } 
    private def ep(key: String) = { 
    val s = System.getenv(key) 
    if (s != null && s.trim.nonEmpty) Some(s) else None 
    } 
} 

trait ApplicationModes extends ScalatraKernel { 
    override def environment: String = AppEnv.environment 
    override def isDevelopmentMode = environment != AppEnv.PRODUCTION && environment != AppEnv.STAGING 
} 

Scalatra 또한, 당신은 아마도 해당 속성을 읽을 수 모드를 설정하는 시스템 속성을 사용하여 유사한 얻을 수 있습니다 결과. -Dorg.scalatra.environment = development

+0

하드 코딩 된 문자열은 이미 금지되어 있습니다. – nilskp

관련 문제