我如何在REPL中运行 Yesod的数据库操作?
How can I run Yesod's DB actions in the REPL?
在正常的 Handler
工作流程中 运行 数据库操作很容易,因为 runDB
函数可用于将 SqlPersistM
操作转换为 Handler
个。
但是没有这种方法可以使用默认应用程序设置将 SqlPersistM
直接转换为 IO
。查看应用程序脚手架中定义的 Foundation.hs
,有以下实例
instance YesodPersist App where
type YesodPersistBackend App = SqlBackend
runDB action = do
master <- getYesod
runSqlPool action $ appConnPool master
instance YesodPersistRunner App where
getDBRunner = defaultGetDBRunner appConnPool
它基本上使用 runSqlPool
与应用程序的配置,但我没有看到如何利用它来访问 REPL 中的配置表单的简单方法。
TL;DR: 我正在寻找的只是能够在我的 Yesod 应用程序 中从 cabal repl 中做类似 runDB $ selectList [...] [...]
的事情,而不必复制 Yesod 脚手架开箱即用的设置。
如果您使用的是 Yesod 脚手架,则提供 handler
and db
functions 让您 运行 处理程序操作和数据库查询,分别来自 repl:
$ cabal repl
db $ selectList [UserName ==. "foo"] []
编辑:我还用这些信息更新了 Yesod's wiki page on GHCi。它包含更多示例并涵盖一些高级用法,例如使用调试器。
在正常的 Handler
工作流程中 运行 数据库操作很容易,因为 runDB
函数可用于将 SqlPersistM
操作转换为 Handler
个。
但是没有这种方法可以使用默认应用程序设置将 SqlPersistM
直接转换为 IO
。查看应用程序脚手架中定义的 Foundation.hs
,有以下实例
instance YesodPersist App where
type YesodPersistBackend App = SqlBackend
runDB action = do
master <- getYesod
runSqlPool action $ appConnPool master
instance YesodPersistRunner App where
getDBRunner = defaultGetDBRunner appConnPool
它基本上使用 runSqlPool
与应用程序的配置,但我没有看到如何利用它来访问 REPL 中的配置表单的简单方法。
TL;DR: 我正在寻找的只是能够在我的 Yesod 应用程序 中从 cabal repl 中做类似 runDB $ selectList [...] [...]
的事情,而不必复制 Yesod 脚手架开箱即用的设置。
如果您使用的是 Yesod 脚手架,则提供 handler
and db
functions 让您 运行 处理程序操作和数据库查询,分别来自 repl:
$ cabal repl
db $ selectList [UserName ==. "foo"] []
编辑:我还用这些信息更新了 Yesod's wiki page on GHCi。它包含更多示例并涵盖一些高级用法,例如使用调试器。