为什么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的评论会有帮助吗?
- docker机+ Gitlabregistry – 如何使authentication工作?
- 如何连接到由docker-compose创build的mysql
- VirtualBox和Nginx非常缓慢地提供caching的静态JS和CSS文件
- 我可以使用什么命令/configuration部署使用ecs-cli的django + postgres + nginx?
- 是否有可能像普通的API一样使用docker远程API?
- 如何修复docker机器IP?
- 从一个单独的容器和主机遇到一个容器暴露的端口时遇到问题
- 在mac os上运行clickhouse docker映像时出错
- 如何列出用户定义的dockernetworking中的所有容器?