Haskell和Yesod新手在這裏。我一直在嘗試遵循Yesod書(http://www.yesodweb.com/book/persistent)中Persistent章節中的Yesod示例的集成。 Sqlite編譯並運行良好,似乎。但是,我試圖使用MongDB,並且很難讓事情順利進行。具體做法是:Yesod/Persistent的MongoDB示例
在SQLite的例子:
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persist|
的耶索德書上說 「蒙戈代碼將使用
mongoSettings
來代替。」但是我無法在任何模塊中找到它,並且代碼不能編譯。所以不是,我只好用這個來代替mongoSettings
:MkPersistSettings { mpsBackend = ConT ''Action }
我不得不進口Language.Haskell.TH.Syntax得到它來編譯,這我假設應該從用戶隱藏起來我當然做得不對。
此外,我發現在Mongo的Persistent測試中沒有「共享」和「遷移」部分。我實際上不確定爲什麼,我猜這是因爲MongoDB是無模式的,不需要遷移?
SqlPersist
我想
MongoPersist
將是對口SqlPersist,我想這幾乎是 - 我發現MongoPersist
一個實例在持久性測試目錄的init.hs。但它被評論了,所以我有一種感覺它已經過時了?無論如何,據我所知,它還沒有定義。所以我不知道該怎麼以下行轉換(將耶索德書的第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
使用withMongoDBConn
所以對於源碼,代碼(從上面所述網頁第一示例):
main :: IO() main = withSqliteConn ":memory:" $ runSqlConn $ do runMigration migrateAll johnId <- insert $ Person "John Doe" $ Just 35 ... and so on
但是
main :: IO() main = withMongoDBConn ":memory:" $ runMongoDBConn $ do runMigration migrateAll johnId <- insert $ Person "John Doe" $ Just 35 ... and so on
不起作用。首先,由於某種原因,runMigration
不在範圍內。好的,也許我不需要遷移MongoDB,所以我刪除了該行。然後,編譯器會抱怨: Couldn't match expected type
AccessMode'與實際類型m0 b0' Expected type: m0 t0 -> (t0 -> m0 b0) -> AccessMode Actual type: m0 t0 -> (t0 -> m0 b0) -> m0 b0
等等。到了這個階段,我對monads的粗略認識還不足以證明這一點。總而言之,我很難將Sodite的書中的Yesod示例集成到MongoDB中。有人能給我提供一個Yesod/Persistent with MongoDB的具體例子嗎?非常感謝提前。
您可以使用'yesod init'腳手架工具,生成一個MongoDB站點並查看它是如何配置的。很難確切地說出你解釋你的情況時缺少哪些部分。 – dflemstr 2012-07-31 08:25:11
感謝您的建議。仔細看,這有一點幫助......儘管在大多數情況下,目錄樹中生成的代碼對於我來說太複雜了,無法弄清楚發生了什麼。我將編輯原始帖子以澄清事情。 – Victor 2012-07-31 17:32:45