Vic*_*or 12 haskell persistent mongodb yesod
Haskell和Yesod新手在这里.我一直在尝试从Yesod书中的Persistent章节(http://www.yesodweb.com/book/persistent)中跟踪与Yesod示例的集成.似乎Sqlite编译并运行良好.但是,我正在尝试使用MongDB,并且很难让事情发挥作用.特别:
在sqlite的示例中:
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persist|
Yesod书中说"Mongo代码将mongoSettings改为使用".但我无法在任何模块中找到它,并且代码无法编译.所以相反,我不得不使用它而不是mongoSettings:
MkPersistSettings { mpsBackend = ConT ''Action }
我必须导入Language.Haskell.TH.Syntax才能让它进行编译,我假设它应该对用户隐藏,所以我当然不是正确的.
另外,我发现在Mongo的Persistent测试中没有"share"和"migrate"部分.我实际上不确定为什么,我猜它是因为MongoDB是Schema-less而不需要迁移?
SqlPersist
我认为MongoPersist是SqlPersist的对应物,我猜它几乎是 - 我MongoPersist在Persistent的测试目录中的init.hs中找到了一个实例.但它被评论出来了,所以我觉得它已经过时了?否则,就我所知,它无论如何都没有定义.所以我不知道如何转换以下行(Yesod书的第115页,或接近http://www.yesodweb.com/book/persistent的末尾)来为MongoDB工作:
instance YesodPersist PersistTest where
type YesodPersistBackend PersistTest = SqlPersist
runDB action = do
PersistTest pool <- getYesod
runSqlPool action pool
Run Code Online (Sandbox Code Playgroud)使用withMongoDBConn
所以对于sqlite,代码是(上面网页的第一个例子):
main :: IO ()
main = withSqliteConn ":memory:" $ runSqlConn $ do
runMigration migrateAll
johnId <- insert $ Person "John Doe" $ Just 35
... and so on
Run Code Online (Sandbox Code Playgroud)
但
main :: IO()
main = withMongoDBConn ":memory:" $ runMongoDBConn $ do
runMigration migrateAll
johnId <- insert $ Person "John Doe" $ Just 35
... and so on
Run Code Online (Sandbox Code Playgroud)不起作用.首先,runMigration由于某种原因不在范围内.好吧,也许我不需要迁移MongoDB,所以我删除了那一行.然后,编译器抱怨:
Couldn't match expected typeAccessMode'具有实际类型m0 b0'
Expected type: m0 t0 -> (t0 -> m0 b0) -> AccessMode
Actual type: m0 t0 -> (t0 -> m0 b0) -> m0 b0,依此类推.在这个阶段,我对monad的粗略了解仅仅不足以解决这个问题.
总而言之,我很难将从Sqlite到MongoDB的书中的Yesto示例转换为.有人可以给我一个Yesod/Persistent with MongoDB的具体例子吗?非常感谢提前.
Obs*_*nvs 11
我今天在Github Yesod Cookbook中添加了一个页面,它将MongoDB与Persistent结合使用.然而,它没有使用withMongoDBConn,也没有避免TH.另外,我解释为什么我使用单独的YAML配置文件.链接:http://bit.ly/VLvmoK
| 归档时间: |
|
| 查看次数: |
3068 次 |
| 最近记录: |