Haskell y Yesod novato aquí. He intentado seguir el ejemplo de Integración con Yesod del capítulo Persistente en el libro de Yesod (http://www.yesodweb.com/book/persistent). El Sqlite compila y funciona bien, parece. Sin embargo, estoy tratando de usar MongDB y estoy teniendo dificultades para hacer que las cosas funcionen. Específicamente:Ejemplo de MongoDB para Yesod/Persistente
En el ejemplo de SQLite: "Mongo código utilizará
mongoSettings
lugar"share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persist|
El libro dice Yesod Pero no puedo encontrarlo en ninguno de los módulos, y el código no se compila. Así que en vez, tuve que usar esto en vez de
mongoSettings
:MkPersistSettings { mpsBackend = ConT ''Action }
tuviera que importar Language.Haskell.TH.Syntax a que se compile, que estoy suponiendo que deben ser ocultados al usuario para Ciertamente no lo estoy haciendo bien.
Además, encontré que en las pruebas persistentes para Mongo no se incluyen las partes "compartir" y "migrar". De hecho, no estoy seguro de por qué, supongo que es porque MongoDB no tiene Schema y no necesita migración.
SqlPersist
pensé
MongoPersist
sería el equivalente a SqlPersist, y supongo que casi es - me encontré con una instancia deMongoPersist
en los init.hs en el directorio de prueba del persistente. Pero está comentado, así que tengo la sensación de que está obsoleto. De lo contrario, no está definido de todos modos por lo que puedo decir. Así que no sé cómo convertir la línea siguiente (página 115 del libro Yesod, o cerca del final de http://www.yesodweb.com/book/persistent) a trabajar para MongoDB:instance YesodPersist PersistTest where type YesodPersistBackend PersistTest = SqlPersist runDB action = do PersistTest pool <- getYesod runSqlPool action pool
Usando withMongoDBConn
Así que para SQLite , el código es (1er ejemplo de la página anterior):
main :: IO() main = withSqliteConn ":memory:" $ runSqlConn $ do runMigration migrateAll johnId <- insert $ Person "John Doe" $ Just 35 ... and so on
Pero
main :: IO() main = withMongoDBConn ":memory:" $ runMongoDBConn $ do runMigration migrateAll johnId <- insert $ Person "John Doe" $ Just 35 ... and so on
no funciona. En primer lugar, runMigration
por algún motivo no está en el alcance. De acuerdo, tal vez no necesito migración para MongoDB, así que elimino esa línea. Entonces, el compilador se queja: Couldn't match expected type
AccessMode 'con el tipo real m0 b0' Expected type: m0 t0 -> (t0 -> m0 b0) -> AccessMode Actual type: m0 t0 -> (t0 -> m0 b0) -> m0 b0
y así sucesivamente. Y en esta etapa, mi conocimiento superficial de las mónadas no es suficiente para entender esto.
En general, estoy teniendo un momento muy difícil para convertir el ejemplo de Integración con Yesod del libro de Sqlite a MongoDB. ¿Podría alguien proporcionarme un ejemplo concreto de Yesod/Persistent con MongoDB? Muchas gracias de antemano.
Puede usar la herramienta de andamio 'yesod init', generar un sitio MongoDB y ver cómo está configurado. Es difícil decir exactamente qué partes faltan de cómo ha explicado su situación. – dflemstr
Gracias por la sugerencia. Mirar a través de eso ayuda un poco ... aunque en su mayor parte el código resultante en el árbol del directorio es demasiado complejo para que pueda descubrir qué está pasando. Editaré la publicación original para aclarar las cosas. – Victor