为什么Yesod的TestImport模块在loadAppSettings中忽略了Env?

我搭build了一个Yesod应用程序。 其中一个创build的文件是test / TestImport.hs。 它包括以下代码片段:

withApp :: SpecWith App -> Spec withApp = before $ do settings <- loadAppSettings ["config/test-settings.yml", "config/settings.yml"] [] ignoreEnv foundation <- makeFoundation settings wipeDB foundation return foundation 

为什么它有ignoreEnv参数? 也就是说为什么在testing模式下忽略环境是适当的?

从Yesod仓库中,我推断TestImport.hs是从适用于该应用程序的数据库的hsfiles中生成的。 在我的情况下,这是Postgres之一: https : //github.com/yesodweb/yesod/blob/master/yesod-bin/hsfiles/postgres.hsfiles#L9172

ignoreEnv本身的定义在这里: https : //github.com/yesodweb/yesod/blob/master/yesod/Yesod/Default/Config2.hs#L147

 loadAppSettings runTimeFiles compileValues envUsage = do ... value <- case envUsage of IgnoreEnv -> return $ applyEnvValue False mempty value' UseEnv -> applyCurrentEnv False value' RequireEnv -> applyCurrentEnv True value' UseCustomEnv env -> return $ applyEnvValue False env value' RequireCustomEnv env -> return $ applyEnvValue True env value' 

这个问题是因为我在为Yesod和Postgres创buildDocker容器后运行testing时遇到问题。 由yesod init生成的config / settings.yml中的数据库configuration与Dockertesting数据库不同。 由于TestImport.hs忽略环境, docker-compose run web yesod test不起作用,因为它查找localhost:5432而不是Docker IP地址和转发的DB端口,并且无法连接到testing数据库。

它工作,如果我改变TestImport.hs有useEnv而不是useEnv ,但我想知道如果这是错误的方式来解决它。 问题Yesod的DB可以configuration环境variables吗? 意味着使用环境variables来configuration数据库是合适的。 testing模式不同吗?

担心的是,开发人员开发环境variables将运行testing套件,并无意中使用这些环境variables,这可能会导致例如他们的开发数据库被意外地擦除。 Michael Snoyman在这里讨论这个: https : //github.com/yesodweb/yesod-scaffold/issues/56

由于两个人因此而遇到问题,可能需要一个不同的解决scheme,或者在testing环境的脚手架上默认不使用环境variables的评论会有帮助吗?