2015-02-12 17 views
5

Rất dễ dàng để chạy các tác vụ DB trong quy trình làm việc Handler bình thường, vì chức năng runDB có thể được sử dụng để chuyển đổi các hành động SqlPersistM thành Handler.Làm cách nào để chạy các hành động DB của Yesod trong REPL?

Nhưng không có cách nào để chuyển đổi SqlPersistM trực tiếp thành IO bằng cài đặt ứng dụng mặc định. Nhìn vào Foundation.hs như nó quy định tại đoạn đầu đài ứng dụng, có các trường hợp sau đây

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

mà về cơ bản sử dụng runSqlPool với cấu hình của ứng dụng, nhưng tôi không thấy một cách dễ dàng như thế nào để tận dụng này để truy cập vào cấu hình trong REPL.

TL; DR: Những gì tôi đang tìm kiếm chỉ đơn giản là việc có thể làm điều gì đó như runDB $ selectList [...] [...] từ bên trong cabal repl trong ứng dụng Yesod tôi, mà không cần phải lặp lại trong các thiết lập mà Yesod giàn giáo không ra khỏi hộp.

+1

Để làm rõ, bạn có đang sử dụng giàn giáo yesod không? Nếu có, bạn có thể sử dụng [các hàm này] (https://github.com/yesodweb/yesod-scaffold/blob/bb7897b67021f42aa38c7f2fedd03be81f8980c9/Application.hs#L161-L171) để chạy các thao tác xử lý và truy vấn DB. Sử dụng ví dụ: 'db $ selectList [UserName ==. "foo"] [] ' – MaxGabriel

+0

@MaxGabriel Tôi khuyên bạn nên đưa ra nhận xét đó một câu trả lời, đó là một minh chứng tốt về cách đạt được mục tiêu của Jakub. –

+0

Cuộc gọi tốt @MichaelSnoyman – MaxGabriel

Trả lời

4

Nếu bạn đang sử dụng giàn giáo Yesod, các handler and db functions được cung cấp để cho phép bạn chạy các hành động xử lý và truy vấn cơ sở dữ liệu, tương ứng, từ repl:

$ cabal repl 

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

Chỉnh sửa: Tôi cũng đã cập nhật Yesod's wiki page on GHCi với điều này thông tin. Nó bao gồm nhiều ví dụ hơn và bao gồm một số cách sử dụng nâng cao, như sử dụng trình gỡ rối.

+0

Cảm ơn! Đây chính xác là những gì tôi đang tìm kiếm. –

Các vấn đề liên quan