- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我写了一个函数
app :: Request -> H.Session H.Postgres IO Response
接受网络请求并构建响应(根据需要查询数据库)。为了实际发送响应,我做了一个包装器
runApp :: H.Postgres -> H.SessionSettings -> Application
runApp pg sess req respond =
respond =<< H.session pg sess (app req)
我将此函数传递给 Warp的 runSettings
永远循环并处理请求:
runSettings appSettings $ runApp pgSettings sessSettings
然而,这真的很糟糕,因为它会为每个请求创建一个新 session ,这违背了连接池和准备好的语句的目的。
我想在 H.session
中调用 runSettings
,而不是相反。但是 runSettings
有一个签名 Settings -> Application -> IO ()
并且一旦进入 IO
我就失去了对 session 的访问权限。有没有办法回到 Session b m r
中?
这是对私有(private)电子邮件问题的转发。
最佳答案
是的,在您的示例中,您为每个请求都创建了一个新 session ,这是 Not Acceptable 。
首先,Session
is just and alias to the reader monad transformer ,这使您可以直接访问池。所以你总是可以这样做:
session postgresSettings sessionSettings $ do
-- session' :: H.Session b m r -> m r
session' <- flip runReaderT <$> ask
let runApp request respond =
respond =<< session' (app request)
liftIO $ do
-- run warp here
其次,ReaderT
有一个 MonadBaseControl
实例,用于类似的模式。
关于haskell - Hasql的session和IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26975746/
我正在尝试使用 Hasql 编写参数化语句以在 PostgreSQL 中设置变量。 import qualified Hasql.Encoders as E import qualified Hasq
我试图在我的 Spock 应用程序之外连接到 Postgres 一次,但我似乎无法使用具有多种返回类型的 Hasql session 句柄。 我的主要应用程序相当简单,但无法编译。 mainApp :
我正在尝试获取 Hasql为“select ... where in”查询编码列表。它会检查我是否使用来自 contravariant-extras 的 contramany ,但我在运行时遇到语法错
我是一名优秀的程序员,十分优秀!