2015-02-12 2 views
5

Es ist einfach, DB-Aktionen im normalen Handler-Workflow auszuführen, da die runDB-Funktion verwendet werden kann, um die SqlPersistM Aktionen in Handler-Aktionen umzuwandeln.Wie kann ich die DB-Aktionen von Jessod in der REPL ausführen?

Aber es gibt keine solche Möglichkeit, SqlPersistM direkt in IO mit den Standard-App-Einstellungen zu konvertieren. Mit Blick auf die Foundation.hs als im Anwendungsgerüst definiert sind, gibt es die folgende Instanz

instance YesodPersist App where 
    type YesodPersistBackend App = SqlBackend 
    runDB action = do 
     master <- getYesod 
     runSqlPool action $ appConnPool master 
instance YesodPersistRunner App where 
    getDBRunner = defaultGetDBRunner appConnPool 

die runSqlPool verwendet grundsätzlich mit der Config-App, aber ich weiß nicht eine einfache Möglichkeit, sehen, wie diese zu nutzen, um die Konfiguration für den Zugriff auf Form innerhalb der REPL.

TL; DR: Was ich suche ist einfach in der Lage sein, etwas wie runDB $ selectList [...] [...] aus Kabale repl in meinem Yesod App, zu tun, ohne die Einrichtung zu duplizieren, die Yesod Gerüst aus der Box der Fall ist.

+1

Um zu verdeutlichen, verwenden Sie das Yesod-Gerüst? Wenn ja, können Sie [diese Funktionen] (https://github.com/yesodweb/yesod-scaffold/blob/bb7897b67021f42aa38c7f2fedd03be81f8980c9/Application.hs#L161-L171) verwenden, um Handler-Aktionen und DB-Abfragen auszuführen. Beispielverwendung: 'db $ selectList [UserName ==. "foo"] [] ' – MaxGabriel

+0

@MaxGabriel Ich würde empfehlen, diesen Kommentar zu einer Antwort zu machen, es ist eine gute Demonstration, wie man Jakubs Ziel erreichen kann. –

+0

Guten Ruf @MichaelSnoyman – MaxGabriel

Antwort

4

Wenn Sie das Yesod Gerüst verwenden, sind die handler and db functions vorausgesetzt, Sie laufen Handler Aktionen und Datenbankabfragen zu lassen, jeweils von der repl:

$ cabal repl 

db $ selectList [UserName ==. "foo"] [] 

Edit: Ich habe auch Yesod's wiki page on GHCi mit diesem aktualisiert Information. Es enthält weitere Beispiele und behandelt einige fortgeschrittene Anwendungen, wie die Verwendung des Debuggers.

+0

Danke! Genau das habe ich gesucht. –

Verwandte Themen